代码之家  ›  专栏  ›  技术社区  ›  CrazyCoder

如何在MSTest中为返回类型为void的方法进行用户断言

  •  0
  • CrazyCoder  · 技术社区  · 6 年前

    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();
     }
    

    现在我如何知道testcase是失败了还是成功了。在这里如何使用Assert?

    3 回复  |  直到 6 年前
        1
  •  0
  •   Presi    6 年前

    根据我们在另一个答案中的评论,我尝试向您展示如何获得控制台输出。要从控制台读取所有文本,必须将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尝试过,只是用了一个控制台程序。

        2
  •  0
  •   Presi    6 年前

    如果你直接测试AnotherMethod,你会看到它是否成功。当它抛出异常时,测试失败。SampleMethod只实现try-catch并调用AnotherMethod(),后者可以直接测试。

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

    如果抛出Execption,则此测试将失败。当方法没有抛出异常时,它就成功了。

        3
  •  0
  •   Jonas Benz    6 年前

    如果方法更改了对象的状态,则可以验证对象的状态是否与预期的一样。如果没有,您可以使用Mock(使用Moq这样的框架)来验证与其他对象的协作。注意,您可能需要将AnotherMethod提取到另一个类中,以便可以模拟和验证调用。