Sdílet prostřednictvím


Třídy statických pomocných rutin

IntelliTest poskytuje sadu statických pomocných tříd, které lze použít při vytváření parametrizovaných testů jednotek:

  • PexAssume: slouží k definování předpokladů pro vstupy a je užitečný pro filtrování nežádoucích vstupů.
  • PexAssert: jednoduchá třída kontrolního výrazu pro použití, pokud vaše testovací architektura neposkytuje jednu třídu
  • PexChoose: datový proud dalších testovacích vstupů, které IntelliTest spravuje
  • PexObserve: zaznamená konkrétní hodnoty a volitelně je ověří ve vygenerovaném kódu.

Některé třídy umožňují interakci s modulem pro odůvodnění IntelliTest na nízké úrovni:

  • PexSymbolicValue: nástroje pro kontrolu nebo úpravu symbolických omezení proměnných

PexAssume

Statická třída používaná k vyjádření předpokladů, jako jsou předpoklady, v parametrizovaných testech jednotek. Metody této třídy lze použít k odfiltrování nežádoucích testovacích vstupů.

Pokud se předpokládá, že podmínka se pro určitý testovací vstup neudrží, je vyvolán výjimka PexAssumeFailedException . To způsobí, že se test bezobslužně ignoruje.

Příklad

Následující parametrizovaný test nebude považovat za j=0:

public void TestSomething(int i, int j) {
     PexAssume.AreNotEqual(j, 0);
     int k = i/j;
     ...
}

Poznámky

Výše uvedený kód je téměř ekvivalentní:

     if (j==0)
          return;

kromě toho, že selhání PexAssume vede k žádným testovacím případům. V případě příkazu if IntelliTest vygeneruje samostatný testovací případ, který pokryje větev příkazu if .

PexAssume také obsahuje specializované vnořené třídy pro předpoklady pro řetězce, pole a kolekce.

PexAssert

Statická třída používaná k vyjádření kontrolních výrazů, jako jsou postconditions, v parametrizovaných testech jednotek.

Pokud se pro určitý testovací vstup neudrží podmínka asserted, vyvolá se výjimka PexAssertFailedException , která způsobí selhání testu.

Příklad

Následující tvrzení tvrdí, že absolutní hodnota celého čísla je kladná:

public void TestSomething(int i) {
     int j = Maths.Abs(i);
     PexAssert.IsTrue(j >= 0);
     ...
}

PexChoose

Statická třída, která do testu poskytuje pomocné vstupní hodnoty, které lze použít k implementaci parametrizovaných mocků.

Třída PexChoose nepomůže při určování, zda test projde nebo selže pro konkrétní vstupní hodnoty. PexChoose jednoduše poskytuje vstupní hodnoty, které se také označují jako volby. Je stále na uživateli, aby omezil vstupní hodnoty a napsal kontrolní výrazy, které definují, kdy test projde nebo selže.

Režimy provozu

Třída PexChoose může pracovat ve dvou režimech:

  • Zatímco IntelliTest provádí symbolickou analýzu testu a testovaného kódu během generování vstupu, výběr vrátí libovolné hodnoty a IntelliTest sleduje, jak se každá hodnota používá v testu a testovaném kódu. IntelliTest vygeneruje relevantní hodnoty pro aktivaci různých cest spuštění v testu a testovaném kódu.

  • Vygenerovaný kód pro konkrétní testovací případy nastaví poskytovatele voleb určitým způsobem, aby opětovné spuštění takového testovacího případu udělalo konkrétní volby pro aktivaci konkrétní cesty spuštění.

Využití

  • Jednoduché volání PexChoose.Value pro vygenerování nové hodnoty:
public int Foo() {
    return PexChoose.Value<int>("foo");
}

PexObserve

Statická třída pro protokolování pojmenovaných hodnot.

Když IntelliTest prozkoumá kód, použije se PexObserve k zaznamenání vypočítaných hodnot pomocí jejich formátovaných řetězcových reprezentací. Hodnoty jsou přidruženy k jedinečným názvům.

PexObserve.Value<string>("result", result);

Příklad

// 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

Statická třída používaná k ignorování omezení parametrů a k tisku symbolických informací přidružených k hodnotám.

Využití

Za normálních okolností se IntelliTest pokusí pokrýt všechny cesty provádění kódu během provádění. Zejména při výpočtu předpokladů a kontrolních podmínek by se však neměly zkoumat všechny možné případy.

Příklad

Tento příklad ukazuje implementaci PexAssume.Arrays.ElementsAreNotNull metoda. V metodě ignorujete omezení délky hodnoty pole, abyste zabránili IntelliTest pokusu o vygenerování různých velikostí pole. Omezení jsou ignorována pouze zde. Pokud se testovaný kód chová odlišně pro různé délky pole, IntelliTest nemůže vygenerovat různá pole velikosti z omezení testovaného kódu.

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");
}

Máte zpětnou vazbu?

Své nápady a žádosti o funkce můžete zadávat na webu Developer Community.