Подтвердить что ты не робот

Эквивалент assert.warning в mstest?

существует ли эквивалент MsTest Assert.Warning в MbUnit?

4b9b3361

Ответ 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 отображается ваше предупреждение:

введите описание изображения здесь