Как использовать Assert для методов с типом возврата void в MSTest - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть метод в моем приложении c #, аналогичный приведенному ниже.

public async Task SampleMethod()
{
    try
    {
        //some code 
        await AnotherMethod();
        // some code
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine(ex.Message.ToString());        
    }
}

Теперь я пытаюсь написать модульный тестовый сценарий для вышеуказанного метода с использованием MStest.Я написал что-то, как показано ниже.

[TestMethod]
public async Task SampleMethodTest()
{
    ClassName cn = new ClassName();
    await cn.SampleMethod();
 }

Теперь, как мне узнать, не прошел ли тест успешно или успешно.Как мне использовать Assert здесь?
Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Если ваш метод изменяет состояние объекта, вы можете проверить, соответствует ли состояние объекта ожидаемому.Если нет, вы можете использовать Mock (с такой платформой, как Moq) для проверки взаимодействия с другими объектами.Обратите внимание, что вам, возможно, понадобится извлечь AnotherMethod в другой класс, чтобы вы могли смоделировать и проверить вызов.

Также обратите внимание, что вам следует попытаться спроектировать свое Программное обеспечение так, чтобы вы могли использовать Outputverification и Stateverification в большинстве UnitTests.Проверка связи с имитациями может привести к ложным предположениям и тестам UnitTes, которые трудно поддерживать.

0 голосов
/ 21 сентября 2018

Основываясь на наших комментариях в моем другом ответе, я пытаюсь показать вам, как получить вывод консоли.Чтобы вы могли читать весь текст из консоли, вы должны установить для консоли StringWriter ():

[TestMethod]
public async Task SampleMethodTest()
{
    using (StringWriter stringWriter = new StringWriter())
    {
        Console.SetOut(stringWriter);

        ClassName cn = new ClassName();
        await cn.SampleMethod();

        string consoleOutput = stringWriter.ToString();

        Assert.IsFalse(consoleOutput.Contains("Exception"));
    }
}

Надеюсь, это сработает.Я не пробовал его с UnitTest, только с консольной программой.

0 голосов
/ 21 сентября 2018

Если вы протестируете AnotherMethod напрямую, вы увидите, насколько он успешен.Когда он выдает исключение, тест не пройден.SampleMethod реализует только попытку try и вызывает AnotherMethod (), который может быть проверен напрямую.

[TestMethod]
public async Task SampleMethodTest()
{
   ClassName cn = new ClassName();
   await cn.AnotherMethod();
 }

Этот тест не пройден, если он вызывает Execption.Когда метод не генерирует исключение, он успешен.

...