Statyczne klasy pomocy
IntelliTest udostępnia zestaw statycznej klasy pomocniczej, która może być używana podczas tworzenia sparametryzowanych testów jednostkowych:
- PexAssume: służy do definiowania założeń dotyczących danych wejściowych i jest przydatny do filtrowania niepożądanych danych wejściowych
- PexAssert: prosta klasa asercji do użycia, jeśli struktura testowa nie udostępnia jednej klasy asercji
- PexChoose: strumień dodatkowych danych wejściowych testów zarządzanych przez narzędzie IntelliTest
- PexObserve: rejestruje konkretne wartości i, opcjonalnie, weryfikuje je w wygenerowanym kodzie
Niektóre klasy umożliwiają interakcję z aparatem rozumowania IntelliTest na niskim poziomie:
- PexSymbolicValue: narzędzia do sprawdzania lub modyfikowania ograniczeń symbolicznych zmiennych
PexAssume
Klasa statyczna używana do wyrażania założeń, takich jak warunki wstępne, w sparametryzowanych testach jednostkowych. Metody tej klasy mogą służyć do filtrowania niepożądanych danych wejściowych testów.
Jeśli zakładany warunek nie zawiera danych wejściowych testu, zgłaszany jest wyjątek PexAssumeFailedException . Spowoduje to dyskretne zignorowanie testu.
Przykład
Następujący test sparametryzowany nie uwzględnia wartości j=0:
public void TestSomething(int i, int j) {
PexAssume.AreNotEqual(j, 0);
int k = i/j;
...
}
Uwagi
Powyższy kod jest prawie równoważny:
if (j==0)
return;
z wyjątkiem tego, że niepowodzenie PexAssume powoduje, że nie ma przypadków testowych. W przypadku instrukcji if intelliTest generuje oddzielny przypadek testowy, aby pokryć gałąź then instrukcji if .
PexAssume zawiera również wyspecjalizowane klasy zagnieżdżone dla założeń dotyczących ciągów, tablic i kolekcji.
PexAssert
Klasa statyczna używana do wyrażania asercji, takich jak postconditions, w sparametryzowanych testach jednostkowych.
Jeśli warunek asercji nie zawiera niektórych danych wejściowych testu, zgłaszany jest błąd PexAssertFailedException , co powoduje niepowodzenie testu.
Przykład
Następujące twierdzenie potwierdza, że wartość bezwzględna liczby całkowitej jest dodatnia:
public void TestSomething(int i) {
int j = Maths.Abs(i);
PexAssert.IsTrue(j >= 0);
...
}
PexChoose
Klasa statyczna, która dostarcza pomocnicze wartości wejściowe do testu, który może służyć do implementowania sparametryzowanych makiety.
Klasa PexChoose nie pomaga określić, czy test przebiegnie pomyślnie, czy nie powiedzie się dla określonych wartości wejściowych. PexChoose po prostu udostępnia wartości wejściowe, które są również określane jako opcje wyboru. Nadal użytkownik musi ograniczyć wartości wejściowe i zapisywać asercje, które określają, kiedy test przejdzie pomyślnie lub zakończy się niepowodzeniem.
Tryby działania
Klasa PexChoose może działać w dwóch trybach:
Podczas gdy narzędzie IntelliTest wykonuje symboliczną analizę testu i testowanego kodu podczas generowania danych wejściowych, wybór zwraca dowolne wartości, a narzędzie IntelliTest śledzi sposób użycia każdej wartości w teście i testowanym kodzie. Narzędzie IntelliTest wygeneruje odpowiednie wartości, aby wyzwolić różne ścieżki wykonywania w teście i przetestowanym kodzie.
Wygenerowany kod dla określonych przypadków testowych konfiguruje dostawcę wyboru w określony sposób, dzięki czemu ponowne wykonanie takiego przypadku testowego spowoduje dokonanie określonych wyborów w celu wyzwolenia określonej ścieżki wykonywania.
Użycie
- Proste wywołanie PexChoose.Value w celu wygenerowania nowej wartości:
public int Foo() {
return PexChoose.Value<int>("foo");
}
PexObserve
Statyczna klasa do rejestrowania nazwanych wartości.
Gdy narzędzie IntelliTest eksploruje kod, PexObserve służy do rejestrowania obliczonych wartości przy użyciu ich sformatowanych reprezentacji ciągów. Wartości są skojarzone z unikatowymi nazwami.
PexObserve.Value<string>("result", result);
Przykład
// product code
public static class MathEx {
public static int Square(int value) { return value * value; }
}
// fixture
[TestClass]
public partial class MathExTests {
[PexMethod]
public int SquareTest(int a) {
int result = MathEx.Square(a);
// storing result
return result;
}
}
PexSymbolicValue
Klasa statyczna używana do ignorowania ograniczeń parametrów i drukowania informacji symbolicznych skojarzonych z wartościami.
Użycie
Zwykle narzędzie IntelliTest próbuje objąć wszystkie ścieżki wykonywania kodu podczas wykonywania. Jednak szczególnie w przypadku obliczeń warunków założeń i asercji nie należy badać wszystkich możliwych przypadków.
Przykład
W tym przykładzie pokazano implementację metody PexAssume.Arrays.ElementsAreNotNull . W metodzie ignorujesz ograniczenia długości wartości tablicy, aby uniknąć próby wygenerowania różnych rozmiarów tablicy przez narzędzie IntelliTest. Ograniczenia są ignorowane tylko tutaj. Jeśli przetestowany kod zachowuje się inaczej dla różnych długości tablic, narzędzie IntelliTest nie może wygenerować różnych rozmiarów tablic z ograniczeń testowanego kodu.
public static void AreElementsNotNull<T>(T[] value)
where T : class
{
PexAssume.NotNull(value);
// the followings prevents the exploration of all array lengths
int len = PexSymbolicValue.Ignore<int>(value.Length);
// building up a boolean value as follows prevents exploration
// of all combinations of non-null (instead, there are just two cases)
bool anyNull = false;
for (int i = 0; i < len; ++i)
anyNull |= value[i] == null;
// was any element null?
if (anyNull)
PexAssume.Fail("some element of array is a null reference");
}
Chcesz przesłać opinię?
Opublikuj swoje pomysły i sugestie funkcji w społeczności deweloperów.