Myślę, że mylisz się ze sposobem, w jaki należy używać Pex: zdecydowanie zalecamy użytkownikom pisanie asercji w sparametryzowanych testach jednostkowych.
Jeśli napiszesz twierdzenia, Pex będzie starał się je systematycznie unieważniać - stąd bierze się moc Pex: im więcej piszesz twierdzeń, tym więcej próbuje znaleźć dla ciebie błędów.
Jeśli użyjesz Pex, aby uzyskać pakiet testowy o wysokim zasięgu kodowym bez pisania asercji, otrzymasz tylko to, o co prosiłeś: pokrycie kodu i wyjątki gwarantowanego środowiska wykonawczego. Pex "only" próbuje pokryć gałęzie (1 asercja = 1 gałąź), jeśli nie ma żadnych gałęzi do zakrycia (brak potwierdzenia), nie będzie generować zakłócających przypadków testowych.
Ogólnie, asercje pisania w sparametryzowanych testach jednostkowych są trudniejsze do napisania, ponieważ ... cóż, są bardziej ogólne. Zacznijmy z zachowaniem zaokrągleń: tam jest na pewno związany na której pozwalasz zaokrąglania występuje, powinno to przełożyć naturalnie w parametryzowanego testów jednostkowych:
[PexMethod]
public void RoundInBounds(double value)
{
var money = new Money(value);
// distance between value and amount should be at most 0.01/2
Assert.AreEqual(value, money.Amount, 0.005);
}
Istnieje również wiele wzorów, które mogą być używane do pisania te. Na przykład Twoja klasa "Pieniądze" jest prawdopodobnie idempotentna: jeśli dodasz wartość "Kwota" z powrotem do instancji pieniężnej, otrzymasz Kwotę z powrotem. Ten tłumaczyć elegancko do testów jednostkowych parametryzowanego:
[PexMethod]
public void RoundIsIdempotent(double value)
{
var first = new Money(value).Amount;
var second = new Money(first).Amount;
Assert.AreEqual(first, second, 0.0001);
}
Należy również zauważyć, że testy jednostkowe parametryzowane zdecydowanie należą do świata TDD. Po prostu napisz najpierw sparametryzowany test jednostkowy, Pex znajdzie błąd, naprawi błąd, Pex znajdzie następny błąd, itd.
Czy to czyni Pex użytecznym narzędziem? Jesteś sędzią.
Aby skrócić historię: 1) Pex nie może sam wygenerować wystarczających testów. 2) Może być używany do generowania parametrów dla testów parametrycznych. Drugi jest przydatny, uzgodniony. Ale co z regresją? Jeśli okaże się, że fragment kodu kończy się niepowodzeniem z parametrem = 123,43, prawdopodobnie chciałbym zapisać gdzieś ten przypadek prawdopodobnie w nunit sparametryzowanym teście. Czy kiedykolwiek próbowałeś mieszać testy sparametryzowane pex i nunit? –
Z ciekawości, dlaczego używasz NUnit, kiedy używasz Visual Studio? – zumalifeguard
Lubię NUnit więcej niż MSTest, ponieważ jest bardziej kompletny.Jednak naprawdę nie mam nic przeciwko MSTest. –