温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#怎么使用MSTest进行单元测试

发布时间:2022-06-30 09:47:52 来源:亿速云 阅读:308 作者:iii 栏目:开发技术

今天小编给大家分享一下C#怎么使用MSTest进行单元测试的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

目前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);
    }
}

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

C#怎么使用MSTest进行单元测试

测试用例声明:

  • 测试用例的类必须是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

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

C#怎么使用MSTest进行单元测试

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

参数传入:

这个是老版本的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.ThrowsException<InvalidOperationException>(() => foo());

                                                                        
    void foo()
    {
        throw new InvalidOperationException();
    }
}

扩展:

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

C#怎么使用MSTest进行单元测试

具体包括如下几点:

  • 特性扩展:

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

  • 断言扩展:

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

  • 执行扩展:

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

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

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

详情:RFC 003

  • 数据驱动扩展:

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

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

    无法为多个用例共享

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

以上就是“C#怎么使用MSTest进行单元测试”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI