2011-08-17 15 views
5

Co do tytułu, zastanawiam się, czy możliwe jest dostarczenie "założeń" do Scalatest podczas definiowania konkretnego przypadku testowego. Założenia w tym kontekście byłyby warunkami wstępnymi testu, tak że gdyby założenie było ocenione jako fałszywe, test byłby pomijany, a nie wykonywany (i odpowiednio traktowany przez biegaczy).Czy Scalatest ma jakiekolwiek poparcie dla założeń?

W tym konkretnym przypadku, myślę o zależnościach między testami - więc nie może być podstawowym testem, który sprawdza, czy dana metoda zwraca cokolwiek, a następnie późniejszych testów wiertło do specyfiki odpowiedzi. Jeśli poprzedni test się nie powiedzie, wolałbym, aby ten drugi test był w jakiś sposób oznaczony jako "nie można go uruchomić", a nie, aby je również zawodził.

To powiedziawszy mogę sobie wyobrazić użycie tego w przyszłości do zdefiniowania pewnych niepołączonych warunków wstępnych (takich jak dysk twardy musi mieć co najmniej 20 MB wolnego miejsca), więc jeśli istnieje ogólny sposób pominięcia testu w czasie wykonywania (w przeciwieństwie do używając ignore lub pending) Wolałbym to usłyszeć.

Specjalna składnia jest mile widziana, ale jeśli muszę ręcznie rzucić pewien rodzaj wyjątku, to też jest OK.

+0

Jak chcesz badanie było zgłosić? Jako Ignorowany, Oczekujący, Sukces, Niepowodzenie? –

+0

Też chciałbym to. Przypadek użycia zapełnia bazę danych materiałami testowymi; jeśli to się nie powiedzie, nie należy uruchamiać testów (nie wszystkie), które byłyby odczytane z bazy danych. Wolałbym zgłaszać je jako "ignorowane". – akauppi

Odpowiedz

5

ScalaTest 2,0 (chyba) dodano wsparcie dla założeniach:

Trait Asercje dostarcza również sposoby, które pozwalają, aby anulować test. Anulowałbyś test, gdyby zasób wymagany przez test był niedostępny. Na przykład, jeśli test wymaga zewnętrznej bazy danych do połączenia z Internetem, a tak nie jest, test można anulować, aby wskazać, że nie można go uruchomić z powodu brakującej bazy danych. Taki test zakłada baza danych jest dostępna, można użyć zakładać sposób, aby wskazać to na początku testu, podobnie jak to:

assume(database.isAvailable) 

http://www.scalatest.org/user_guide/using_assertions

+0

imho, to powinna być poprawna odpowiedź – akauppi

+0

@akauppi Zgadzam się. Teraz jest. :) –

1

Scalacheck, który jest często stosowany w połączeniu z scalatest, można to zrobić:

import org.scalacheck._ 

object XSpecifictaion extends Properties ("X") { 

    property ("sample (a - b)") = Prop.forAll { (a: Int, b: Int) => 
     (a < b || (a - b >= 0)) } 
} 

! (a < b) jest twoim założeniem, a (a - b> = 0) prawdziwym testem; wykonujesz to ostatnie tylko, jeśli założenie jest prawdziwe, więc negujesz swoje założenie i łączysz je ze skrótem - OR.

Powiązane problemy