У меня есть следующий метод:
public static DateTime SubQtrs( this DateTime dt, int qtrs )
{
Contract.Requires( qtrs > -1 );
Contract.Requires( ( qtrs * 3 ) >= -120000 && ( qtrs * 3 ) <= 120000 );
// do something
}
Я создал параметризованный модульный тест и использовал Pex для создания какого-то модульного теста.Как и ожидалось, Пекс протестировал ограничения контракта и передал значение qtrs, которое нарушило контракт.Я сказал модульному тесту ожидать исключения с: [ExpectedException (typeof (TraceAssertionException))] и все прошло.
Теперь, когда я просто запускаю модульный тест с помощью MS Test Harness (без Pex), я получаюошибка: Descrtipion: Не выполнено предварительное условие: (qtrs * 3> = -120000 && ......
Это дает мне трассировку стека, в основном сообщающую мне, что сработал контрактный помощник. Затем мне предоставляется выбор:Прервать, повторить или игнорировать.
В любом случае, тест не пройден, и я получаю: Failed SubQtrsThrowsTraceAssertionException818 DGALib.Extensions.Tests Метод теста System.ExtensionMethodsTest.SubQtrsThrowsTraceAssertionException88 исключение исключения, исключение переполнения, исключение исключения..Exceptions.TraceAssertionException ожидалось. Сообщение об исключении: System.ArgumentOutOfRangeException: значение месяца должно быть в диапазоне +/- 120000. ... *
Почему модульный тест больше не распознает ошибку контракта кода?