Właśnie zauważyłem, że Spock nie dochodzić warunki jeśli dodać klauzulę if
w bloku spodziewać jak wStan na oczekiwać zablokować
def myTest() {
given:
a = true
expect:
if (a) {
1 == 2
}
else {
1 == 1
}
}
Powyższy testu minie ponieważ nie są sprawdzane warunki . Albo sprawdzanie kondycji nie zostanie przekazane dalej, jeśli przekazuje instrukcję if.
Rozwiązaniem tego problemu jest dodanie assert
oświadczenia wewnątrz bloku if, czyli dochodzić 1 == 2.
Co jestem zainteresowany jest, dlatego funkcjonalność jest tak? Czy istnieje inny sposób obejścia tego? Zakładam, że ma to coś wspólnego z Groovy, jeśli funkcja instrukcji, ale nie znam wystarczająco dobrze szczegółów językowych. Najprawdopodobniej instrukcja if nie zwraca niczego, z czym mógłby oczekiwać blok Spocka.
Brak odpowiedzi na pytanie, ale dlaczego miałbyś testować w ten sposób? Nie powinieneś testować znanych rzeczy? Jeśli istnieją różne ścieżki, czy nie powinny to być różne testy? –
Oddanie, co powiedział Tim. Jeśli test się nie powiedzie, będziesz w stanie powiedzieć, co dokładnie zakończyło się niepowodzeniem, a nie jedną z rzeczy X? Być może był to tylko przykład, ale każdy test powinien testować tylko jedną rzecz. Być może potrzebujesz podobnego testu z pewnymi wartościami zmienionymi? Jeśli tak jest, powinieneś rozważyć sprawdzenie, gdzie znajduje się instrukcja w spocku. –
@tim_yates @Aseem Przyczyną użycia instrukcji if przy sprawdzaniu warunków jest złożoność danych wejściowych testu i tylko kilka wyjątkowych przypadków wpada w drugą gałąź, która zasadniczo sprowadza się do lenistwa :) Przypadek użycia jest czymś jak 'Sprawdź, czy warunek A jest spełniony, chyba że X, w takim przypadku sprawdź, czy warunek B jest spełniony zamiast'. Może być rozwiązany z blokiem, ale na mój gust jest zbyt szczegółowy. – kaskelotti