Pex не будет пытаться генерировать все возможные комбинации значений. Вместо этого он анализирует ваш код и пытается охватить каждую ветвь. Так что если у вас есть
if (MyObject.Property1 == "something")
{
...
}
тогда он попытается создать объект, имеющий Property1 == "something"
. Поэтому ограничение тестов некоторыми предопределенными объектами скорее противоречит «философии Pex». Тем не менее, вы можете найти следующую информацию интересной.
Вы можете предоставить заводской класс Pex. См., Например, это сообщение в блоге или это .
[PexFactoryClass]
public partial class EmployeeFactory
{
[PexFactoryMethod(typeof(Employee))]
public static Employee Create(
int i0,
string s0,
string s1,
DateTime dt0,
DateTime dt1,
uint ui0,
Contract c0
)
{
Employee e0 = new Employee();
e0.EmployeeID = i0;
e0.FirstName = s0;
e0.LastName = s1;
e0.BirthDate = dt0;
e0.StartDateContract = dt1;
e0.Salary = ui0;
e0.TypeContract = c0;
return e0;
}
}
Затем Pex вызовет этот фабричный класс (вместо фабрики по умолчанию), используя соответствующие значения, которые он обнаруживает при исследовании вашего кода. Заводской метод позволяет ограничить возможные параметры и значения.
Вы также можете использовать атрибут PexArguments
для предложения значений, но это не помешает Pex попытаться сгенерировать другие значения, чтобы покрыть любые ветви в вашем коде. Он просто пробует те, которые вы предоставили первыми.
[PexArguments(1, "foo")] // try this first
void MyTest(int i, string s)
{
...
}
См. здесь для получения дополнительной информации о PexArguments
, а также поиска «начальных значений» в документации PDF на Параметризованные тестовые таблицы .