существует ли эквивалент MsTest Assert.Warning в MbUnit?
Эквивалент assert.warning в mstest?
Ответ 1
Самое близкое совпадение - Assert.Inconclusive()
- это не делает тест неудачным как таковой, но это также не удается. Он попадает в третью стадию под названием Inconclusive.
Один тест Inconclusive приведет к тому, что весь набор тестов будет неубедительным.
Существуют также перегрузки, которые также поддерживают пользовательские сообщения:
Assert.Inconclusive("Ploeh");
Ответ 2
У меня есть аналогичная проблема, поскольку я использую NUnit для некоторых проектов. Попробуйте использовать
Console.Write("Some Warning");
Ответ 3
Вот мой хак о том, как иметь предупреждения с nunit (я знаю, что этот вопрос был о mstest, но это тоже должно работать). Как всегда, меня интересуют любые улучшения. Этот метод работает для меня.
Справочная информация. У меня есть код, который проверяет сами тесты для правильных комментариев и имеет логику для обнаружения, если кто-то скопировал и вложил другой тест без изменения комментариев. Это предупреждения, которые я хочу показать разработчику без нормального Assert.Inconclusive, блокирующий фактический тест от запуска. Некоторые из них сосредоточены на тестировании, а этап рефакторинга очистки - удалить предупреждения.
Миссия: иметь предупреждения после запуска всех других утверждений. Это означает даже отображение предупреждений после Assert.Fail, которые обычно происходят в тестах во время разработки.
Реализация: (лучше всего создать базовый класс для всех тестовых файлов):
public class BaseTestClass
{
public static StringBuilder Warnings;
[SetUp]
public virtual void Test_SetUp()
{
Warnings = new StringBuilder();
}
[TearDown]
public virtual void Test_TearDown()
{
if (Warnings.Length > 0)
{
string warningMessage = Warnings.ToString();
//-- cleared if there is more than one test running in the session
Warnings = new StringBuilder();
if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
{
Assert.Fail(warningMessage);
}
else
{
Assert.Inconclusive(warningMessage);
}
}
}
Использование тестирования
[Test]
public void Sample_Test()
{
if (condition) Warning.AppendLine("Developer warning");
Assert.Fail("This Test Failed!");
}
Фактический результат:
"This Test Failed!"
"Developer warning"
Состояние теста не выполнено - RED
Если тест прошел и было предупреждение, вы получите статус Inconclusive - ЖЕЛТЫЙ.
Ответ 4
Возможно, вы захотите использовать специальное исключение.
Проблема с Assert.Inconclusive заключается в том, что Test Explorer утверждает, что тест еще не запущен. Это может ввести в заблуждение при запуске теста в будущем, особенно если тест выполняется другими разработчиками:
То, как я привык, выглядит следующим образом. Во-первых, определите пользовательский UnitTestWarningException
. Я дал мне дополнительный конструктор, поэтому я могу передать мое предупреждение String.Format-style с аргументами:
public class UnitTestWarningException : Exception
{
public UnitTestWarningException(string Message) : base(Message) { }
public UnitTestWarningException(string Format, params object[] Args) : base(string.Format(Format, Args)) { }
}
Затем, в тот момент, когда вы хотите закончить unit test с предупреждением, вместо этого выполните UnitTestWarningException
:
[TestMethod]
public void TestMethod1()
{
.
.
.
try
{
WorkflowInvoker.Invoke(workflow1, inputDictionary);
}
catch (SqlException ex)
{
if (ex.Errors.Count > 0
&& ex.Errors[0].Procedure == "proc_AVAILABLEPLACEMENTNOTIFICATIONInsert")
{
//Likely to occur if we try to repeat an insert during development/debugging.
//Probably not interested--the mail has already been sent if we got as far as that proc.
throw new UnitTestWarningException("Note: after sending the mail, proc_AVAILABLEPLACEMENTNOTIFICATIONInsert threw an exception. This may be expected depending on test conditions. The exception was: {0}", ex.Message);
}
}
}
Результат: Test Explorer затем показывает, что тест был выполнен, но с ошибкой UnitTestWarningException
отображается ваше предупреждение: