Proszę o code review aplikacji do szybkiego tworzenia listy wyrazów/zdań z obecnie załadowanych napisów. Aplikacja ma możliwość pobrania timestampu z programu VLC poprzez interfejs lua http
. Klawisz do aktywacji ekranu wyboru to F11
.
- Co to za zmora z nazywaniem pierwszego commita "Initial commit"? Nie mogłeś w nim zawrzeć po prostu tego co tam jest?
- Testy są dosyć słabej jakości, ale dobrze że jakieś chociaż są.
- To "arrange", "act", "assert" tez jest użyte trochę dziwnie, bo idea za tymi sekcjami "arrange", "act", "assert" (czy tam given, when, then) odnoszą się do jakiegoś stanu pre-istniejącego przed akcją. A ty wielu miejscach nie masz żadnego stanu pre-istniejącego, to są po prostu parametry wejściowe.
- Jakiś powód czemu ten kod jest w teście:
zamiast po prostuvar pattern = "1, 3, 8"; //act var result = selectionConverter.Convert(pattern, 10);
var result = selectionConverter.Convert("1, 3, 8", 10);
?.
To jest właśnie wpadanie w pułapkę dopasowania się do arrange/act/assert. - Klasa
PatternToSelectionConverter
jest dziwna. Czemu jej użycie to jestnew PatternToSelectionConverter().Convert("pattern", 5);
. Czy nie lepiej byłoby zrobić npnew Pattern("pattern").ToSelection(5);
? - Ja bym zrobił rename
SingleSelection
na po prostuSelection
. - Nazwy klas sugerują że nie do końca dobrze wiesz jak organizować kod. niektóre rzeczy są dobrze nazwane,
ISelection
,Entry
,SubtitlesTypes
, ale inne widać jasno że nie miałes pojęcia jak je nazwać dobrze:MediaTimerProvider
,LayersSettingsManager
,SubtitlesEntryFinder
. To wygląda jakbys nie do końca wiedział gdzie "upchać" kod. Czemu nie nazwać ich po prostuMediaTime
,LayersSettings
,SubtitlesEntries
? -
https://github.com/Krztk/KtSubs/blob/master/KtSubs.CoreTests/Selections/RangeSelectionTests.cs Jakiś powód czemu to
displayEntry
jest ustawiane w setupie klasy, zamiast normalnie w metodzie testującej? Jaki jest cel tego zabiegu. -
https://github.com/Krztk/KtSubs/blob/master/KtSubs.CoreTests/Selections/SingleSelectionTests.cs Tutaj imo to że
displayEntry
to jest pole klasy to jest zły pomysł. Jeśli chcesz współdzielić zależności (czego w sumie nie powinieneś robić), to lepiej jakby to była funkcja, a nie pole. - Nazwa klasy
EntryMerger
jest bardzo słaba. Nazwa powinna mówić jakimi kryteriami się posługuje klasa podczas mergowania entry'sów. Tutaj widać że chyba wtedy je łączy, jak mają więcej niż 1.Count
overlaping. Więc dobrze byłoby to jakoś zawrzeć w nazwie klasy, możeConjoinedEntries
czy jakoś tak. - Ja bym zrobił rename
TimeInterval
naTime
alboInterval
. - Rename
MkvSubtitleExtractor
naMkvSubtitle
? Swoją drogą pod to chyba nie ma testów?
Dziękuję za poświęcony czas oraz cenne uwagi.
- https://github.com/Krztk/KtSubs/blob/master/KtSubs.CoreTests/Selections/RangeSelectionTests.cs Jakiś powód czemu to displayEntry jest ustawiane w setupie klasy, zamiast normalnie w metodzie testującej? Jaki jest cel tego zabiegu.
- https://github.com/Krztk/KtSubs/blob/master/KtSubs.CoreTests/Selections/SingleSelectionTests.cs Tutaj imo to że displayEntry to jest pole klasy to jest zły pomysł. Jeśli chcesz współdzielić zależności (czego w sumie nie powinieneś robić), to lepiej jakby to była funkcja, a nie pole.
Miałem zamiar napisać więcej testów niż 1 i reużywać to pole tak jak to zrobiłem w linku z punktu 9. Pole jest ustawiane przed każdym testem na nowo. https://xunit.net/docs/shared-context
- Rename MkvSubtitleExtractor na MkvSubtitle? Swoją drogą pod to chyba nie ma testów?
Zgadza się. Nie ma testów. MkvSubtitleExtractor
korzysta z zewnętrznych programów wchodzących w skład MKVToolNix. Nie wiem jak przetestować kod, który uruchamia CLI i odczytuje wyniki.
Kokoniłaj napisał(a):
Miałem zamiar napisać więcej testów niż 1 i reużywać to pole tak jak to zrobiłem w linku z punktu 9. Pole jest ustawiane przed każdym testem na nowo. https://xunit.net/docs/shared-context
Słabe podejście. W ogóle reużywanie danych w testach to jest słaby pomysł. Każdy test powinien używać minimum danych potrzebnych do tego konkretnego testu. Takie współdzielenie danych skutkuje powstawaniem god-objectów do testów, na który się potem patrzy i nie wie które dane są do czego. Staraj się tego unikać.
- Rename MkvSubtitleExtractor na MkvSubtitle? Swoją drogą pod to chyba nie ma testów?
Kokoniłaj napisał(a):
Zgadza się. Nie ma testów.
MkvSubtitleExtractor
korzysta z zewnętrznego programów wchodzących w skład MKVToolNix. Nie wiem jak przetestować kod, który uruchamia CLI i odczytuje wyniki.
No po prostu wywołaj tą funkcję w teście, i zrób asercję na jej wynik. To czy ta klasa "pod spodem" ma kod C# czy zewnętrzne narzędzie nie ma znaczenia. Przecież ma działać tak samo.