Microsoft продолжает совершенствовать инструменты разработки для .NET. И вот недавно Visual Studio 2012 получила возможность автоматических тестов кода в проектах типа Portable Class Library.
По сути, это первый шаг по переносу функциональности Pex в новые версии Visual Studio. Его движок анализирует возможные пути исполнения .NET кода библиотеки с целью выявить ошибки и исключения. Результат такого исследования помогает понять поведение последнего в различных ситуациях.
Давайте посмотрим как все это выглядит на практике. Для запуска тестов необходимо установить расширение Microsoft Code Digger.
Создадим тестовый проект типа Portable Class Library с именем PortableClassLibraryTest. В качестве целевых платформ PCL возьмем .NET 4, Silverlight 4, Windows Phone 7 и .NET for Windows Store.
Код единственного класса самой библиотеки будет очень простым:
namespace PortableClassLibraryTest
{
using System.Linq;
public class TestClass
{
public string TestMethod(int index, string value, int[] numbers)
{
var aPos = value.IndexOf('a');
return string.Format("{0} {1} {2} {3}", index, value, aPos, numbers.Sum());
}
}
}
Приступим к тестам. Для этого внутри кода метода TestMethod() откроем контекстное меню и выберем пункт "Generate Inputs / Outputs Table".
Это приведет к запуску автоматических тестов, результат которых будет выведен в виде таблицы:
В ней хорошо видно, при каких значениях параметров выполнение TestMethod() закончилось ошибкой. Обратите внимание, что все они выделены жирным шрифтом и отмечены соответствующей иконкой.
Давайте исправим одну из ситуаций и добавим проверку на null последнего аргумента метода.
namespace PortableClassLibraryTest
{
using System;
using System.Linq;
public class TestClass
{
public string TestMethod(int index, string value, int[] numbers)
{
if (numbers == null)
throw new ArgumentNullException("numbers");
var aPos = value.IndexOf('a');
return string.Format("{0} {1} {2} {3}", index, value, aPos, numbers.Sum());
}
}
}
Теперь пересоберем проект и запустим тесты заново.
Обратите внимание, что исключения, выбрасываемые самим методом, не отмечены как ошибки. Разработчику остается проанализировать оставшиеся ситуации и внести в код соответствующие изменения.
К сожалению, текущая версия Code Digger для Visual Studio 2012 имеет ограничения:
- предназначена только для Portable Class Libraries;
- работает только с public методами в public классах;
- не понимает вызовы Code Contracts в теле методов.
Будем надеяться что в дальнейшем это будет исправлено.