首页后端开发其他后端知识C#用MSTest进行单元测试的方法步骤是什么?

C#用MSTest进行单元测试的方法步骤是什么?

时间2024-03-24 04:26:03发布访客分类其他后端知识浏览646
导读:这篇文章主要介绍了title,讲解详细,步骤过程清晰,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。 我之前写过一篇XUNit的简介:使用Xunit来进行...
这篇文章主要介绍了title,讲解详细,步骤过程清晰,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。


我之前写过一篇XUNit的简介:使用Xunit来进行单元测试。Xunit在当时确实是一个最简单易用的测试框架,然而,随着发展,Xunit也变得复杂了不少,光写一个最简单的测试就要导入8个包。

如果在大一点的项目中使用到还罢了,但如果只是随手想写一点单元测试引入这一堆包确实看着不大舒服。于是我又看了下MS自家的MS TEST。发现随着发展,MS自家的MS TEST也改变了不少,虽然以前用过老版MS TEST的朋友基本上能拿着就用,但本文这里仍然简单的介绍一下,方便新手上路。

目前MS发布了两个版本的MS TEST:

  • MS TEST V1:V1在.net framework中自带,引用Microsoft.VisualStudio.QualityTools.UnitTestFramework即可

  • MS TEST V2:V2的版本依赖于两个包: MSTest.TestFramework和MSTest.TestAdapter

这两个版本使用起来还是大同小异的,MS TEST V2主要是为了.net core准备的,当然也可以在.net framework上运行,并且新加入了一些扩展。本文这里是针对MS TEST V2进行的介绍。

首先来写一个简单的用例:

[TestClass]
public class TestClass
{

    [TestMethod]
    public void TestPass()
    {
    
        Assert.IsTrue(true);

    }


                                                                                                            
    [TestMethod]
    public void TestFail()
    {
    
        Assert.IsTrue(false);

    }

}

写完后编译即可在测试管理器上看到用例,运行它就可以看到结果了:

测试用例声明:

  • 测试用例的类必须是public的,并且用TestClassAttribute标记

  • 测试用例必须是public的,并且用TestMethodAttribute标记

Xunit并不需要TestClass声明,但给测试类声明也是有好处的,可以对其下的所有测试用例分组。

断言:

可以用Assert断言类来检验测试是否成功,也可以自己写帮助类抛异常检验。

构建和析构:

和Xunit非常类似,测试框架执行每个测试用例的时候,会创建测试类对象,测试用例执行完后,如果测试类是IDisposable的,会执行Dispose函数。因此,简单的做法是:

  • 在测试用例类的构造函数指向数据构建操作

  • 在Dispose函数中指向数据清理操作

另外,也可以通过TestInitialize和TestCleanup两个Attribute来指定额外的构建和清理函数。通过函数指定的构建和析构函数在测试异步函数的时候还是非常有用的。这样,一个测试用例执行的顺序是

  • 构造函数

  • TestInitialize制定的构建函数(如果有)

  • 测试用例

  • TestCleanup制定的清理函数(如果有)

  • IDisposable. Dispose函数(如果有)

分组:

分组可以通过TestCategory标记:

[TestClass,TestCategory("MS TEST V2")]
public class TestClass

查看方式中要选择按特征分类:

这个标记也可以放在测试类,也可以放在测试用例上,效果不一样,请自行尝试。

参数传入:

这个是老版本的MS TEST的最大不足了,现在也可以通过DataRowAttribute指定测试用例的参数:

[DataTestMethod]
[DataRow(1, 2, 3)]
[DataRow(3, 5, 8)]
[DataRow(7, 6, 11)]
public void AddTest(int n1, int n2, int sum)
{
    
    Assert.AreEqual(sum, n1 + n2);

}

也可以指定多组参数,测试就会执行多次用例。在MS TEST V2的版本中,还可以通过ITestDataSource接口实现自定义数据源。

异常测试:

异常下现在也和xunit一样采用断言的方式捕获了。

public void TestException()
{
    
    Assert.ThrowsExceptionInvalidOperationException>
    (() =>
     foo());


                                                                        
    void foo()
    {
    
        throw new InvalidOperationException();

    }

}
    

扩展:

在MS TEST V2中,微软提供了一定的扩展支持,如下图所示(这些扩展也大部分支持MS TEST V1)

具体包括如下几点:

  • 特性扩展:

    通过继承TestPropety,可以更方便的为测试用例添加描述。详情:RFC 001

  • 断言扩展:

    通过内置的断言扩展,可以更简洁的方式定制自己的断言API。详情:RFC 002

  • 执行扩展:

    MSTest V2允许我们在以下两个层级加入扩展。

    测试方法级别:允许创建自己的TestMethod特性,定制执行逻辑

    测试类级别:允许创建自己的TestClass特性,定制内部所有测试方法的执行逻辑

详情:RFC 003

  • 数据驱动扩展:

    目前的MS TEST已经支持静态数据参数DataRow的支持,它的主要特点是:

    静态数据不能满足复杂的场景需要

    无法为多个用例共享

    如果需要更复杂的数据源,可以通过ITestDataSource接口实现。




通过以上内容的阐述,相信大家对“C#用MSTest进行单元测试的方法步骤是什么?”已经有了进一步的了解,更多相关的问题,欢迎关注网络或到官网咨询客服。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C#用MSTest进行单元测试的方法步骤是什么?
本文地址: https://pptw.com/jishu/651818.html
MySQL索引用B+树结构的优势在哪? 数据库设计需要关注哪些,怎样给用户授权限?

游客 回复需填写必要信息