Udostępnij za pośrednictwem


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.