SmartTestNowość NR.3

Co jest nowego w Visual Studio 2015 .

Zacznijmy od możliwości wygenerowania testów jednostkowych na bazie inteligentnego algorytmu.  Co niektórzy już płaczą, że test jednostkowy to MSTest, a nie jakiś NUnit, ale wierzcie mi jest dobrze.

Jak z tej funkcji skorzystać. Zaznaczamy metodę lub całą klasę i z menu wybieramy “Smart Unit Test”.

Smart Unit Test

 

Smart Unit Test nie zawsze się popisuje. Metoda dzielenia przyjmuje dwa parametry i użycie tej metody zawiera tylko jeden przypadek z parametrami zero.

Najwidoczniej test uznał, że nie potrzeba ich więcej.

Divide

Sprawa będzie wyglądała inaczej jeśli parametry będą liczbami całkowitymi. Jak wiadomo dzielenie przez zero spowoduje błąd.

Smart Unit Test już w swoim algorytmie przewidział czarne scenariusze takiego kodu i wybrał już więcej przypadków do przetestowania metody.

Divide int

Widać, że algorytm skanuje nie tylko parametry, ale ciało metody. W kodzie poniżej mamy wiele przypadków.

public static void Random(int r)
{
    switch (r)
    {
        case 0: System.Console.Write(r + " is 0"); break;
        case 1: System.Console.Write(r + " is 1"); break;
        case 2: System.Console.Write(r + " is 2"); break;
        case 3:
        case 4:
        case 5:
        case 6:
            System.Console.Write(r + " is 3,4,5 or 6");
            break;
        default:
            System.Console.Write(r + " is something else");
            break;
    }
}

Smart Unit Test wygenerował tym razem 11 przypadków do przetestowania. Szkoda ,że Smart Unit Test nie zaznacza tego, że dany przypadek nie zawiera  żadnego potwierdzenia. 

A mówiąc w normalnym języku programisty a raczej Polish-English nie ma tam asertów.

Case

Wygenerowane scenariuszem można zapisać do postaci  projektu UnitTest.

Save

Oto jak wygląda utworzony projekt.

image

A tak wygląda zawartość klasy testowej. Klasa testowa korzysta z techniki “Microsoft Pex”. Metoda testowa istnieje, ale parametry będą do tej metody przekazywane.

Zwykle w testach deklaracja potrzebnych zmiennych do testu odbywa się wewnątrz metody testującej.

Microsoft Pex istnieje już od jakiegoś czasu, ale tylko weterani bawili się tym dodatkiem. W Visual Studio 2015 jest on zintegrowany.

Jak on działa? Zobaczmy.

[TestClass]
[PexClass(typeof(Calculator))]
[PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]
[PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]
public partial class CalculatorTest
{
    [PexMethod]
    public string Divide(int arg1, int arg2)
    {
        string result = Calculator.Divide(arg1, arg2);
        return result;
        // TODO: add assertions to method CalculatorTest.Divide(Int32, Int32)
    }
}

Odpalając test jednostkowy…

image

Możemy zobaczyć wygenerowane scenariusze pod postacią kodu. Oto ich fragment.

image

Plik ten jest tymczasowy.

image

Automatyczne testy nie są idealne . Jednak rozwiązują wiele problemów. Czasami zdarza się tworzyć test jednostkowy tylko po to, by sprawdzić, czy dana metoda działa. Jest to sprzeczne z filozofią TDD, ale czasem tak jest.

Testy jednostkowe napisane przez nas nie znikną, jednak te wygenerowane mogą załatać dziurę w naszych własnoręcznie napisanych testach.