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 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.
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.
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.
Wygenerowane scenariuszem można zapisać do postaci projektu UnitTest.
Oto jak wygląda utworzony projekt.
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…
Możemy zobaczyć wygenerowane scenariusze pod postacią kodu. Oto ich fragment.
Plik ten jest tymczasowy.
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.