когда я создаю PUT, который вызывает метод тестируемого класса и присваивает ему PexMethod
, «Run Pex» будет использовать этот метод и создавать для него автоматически сгенерированные тесты.
Это работает только до тех пор, пока вызов метода находится непосредственно в теле PUT.
Пример:
Это PUT используется "Run Pex":
[PexGenericArguments(typeof(string))]
[PexGenericArguments(typeof(int))]
[PexGenericArguments(typeof(object))]
[PexMethod]
public string Convert01_ConverterForTypeNotRegistered<T>(
[PexAssumeUnderTest] ToStringConverter target, T objectToConvert)
{
var result = "";
result = target.Convert(objectToConvert);
return result;
}
Это PUT , а не , используемый "Run Pex":
[PexGenericArguments(typeof(string))]
[PexGenericArguments(typeof(int))]
[PexGenericArguments(typeof(object))]
[PexMethod]
public string Convert01_ConverterForTypeNotRegistered_ThrowsInvalidOperationException<T>(
[PexAssumeUnderTest] ToStringConverter target, T objectToConvert)
{
var result = "";
PexAssert.Throws<InvalidOperationException>(() => target.Convert(objectToConvert));
return result;
}
Я хочу показать, что вызов метода всегда вызывает это исключение, независимо от параметров.
Как этого добиться?
Я уже задавал этот вопрос неделю назад на официальном форуме Pex от Microsoft , но не получил ни одного ответа, поэтому я делаю двойной пост здесь.
Проблема может быть воспроизведена следующим образом:
- Иметь простое решение с одним проектом, одним классом и одним методом.
- Щелкните правой кнопкой мыши по этому методу и выберите Run Pex.
- В результатах исследования Pex щелкните правой кнопкой мыши по любой записи и выберите «Сохранить тест ...». Он создаст новый тестовый проект с двумя соответствующими файлами:
<class-name>Test.cs
и <class-name>Test.<MethodName>.g.cs
. В первом файле находится PUT, во вторых - конкретные методы тестирования, по одному на каждый параметр, выбранный Pex. Второй файл автоматически воссоздается каждый раз, когда вы запускаете pex для метода с PUT в первом файле.
- Щелкните правой кнопкой мыши по тестовому проекту и выберите «Pex» -> «Удалить сгенерированные модульные тесты». Это удалит определенные тесты из второго файла.
- Перейдите к файлу с PUT и переименуйте PUT в произвольное имя.
- Вернитесь к методу из пункта 1 и снова щелкните правой кнопкой мыши и выберите Run Pex.
- Pex создаст новый файл в тестовом проекте с именем `Test..g.cs. Он использует тот же PUT, что и раньше, хотя вы переименовали его.
- Измените PUT снова, оставив имя как есть, но изменив содержимое на мой второй пример с PexAssert.Throws.
- Снова щелкните правой кнопкой мыши по тестовому проекту и выберите «Pex» -> «Удалить сгенерированные модульные тесты».
- Опять же, щелкните правой кнопкой мыши на методе из пункта 1 и выберите «Run Pex»
- Откройте оба файла * .g.cs в тестовом проекте, и вы увидите, что тестов нет. Это означает, что Пекс не использовал PUT. Вот в чем проблема:)