Как вывести сообщение с утверждением It в MSpec - PullRequest
7 голосов
/ 30 марта 2011

Мы используем MSpec для модульных тестов после того, как ранее использовали MbUnit.

Я привык говорить

Assert.IsTrue(status, "Status should be true");

в MbUnit, т.е. добавление сообщения к утверждению, которое выводится в случае сбоя.

Я не могу найти соответствующую функциональность в MSpec. Я проверяю, что некоторые XML-файлы проверяются, и, если это не удается, я хочу сообщить об ошибке проверки. Так что мой код MSpec выглядит как

string message;

bool isValid = ValidateXml(myXml, out message);

isValid.ShouldBeTrue();

Но я хочу иметь возможность добавить message в тестовый вывод, если ShouldBeTrue() не удастся.

Возможно ли это?

Ответы [ 2 ]

6 голосов
/ 30 марта 2011

Глядя на источник для MSpec, нет. Методы расширения не принимают строковый параметр для сообщения.

Вы можете тривиально добавить функциональность в терминах написанного кода; код в machine.specifications / Source / Machine.Specifications / ExtensionMethods.cs. Я не знаю, как сложно это построить.

Например, вы можете создать перегрузки ShouldBeFalse и ShouldBeTrue примерно так:

[AssertionMethod]
public static void ShouldBeFalse([AssertionCondition(AssertionConditionType.IS_FALSE)] this bool condition, string message)
{
  if (condition)
    throw new SpecificationException(message);
}

[AssertionMethod]
public static void ShouldBeTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] this bool condition, string message)
{
  if (!condition)
    throw new SpecificationException(message);
}
1 голос
/ 30 марта 2011

На данный момент для этого нет инфраструктуры, но, как и Мэтт, я бы предложил реализовать ваши собственные «отчетные» утверждения поверх встроенной библиотеки утверждений MSpec (возможно, в библиотеке классов <Product>.ForTesting).

Во всех других случаях поле It указывает, что должно быть наблюдаемым, следовательно, отсутствует параметр сообщения.

...