使用MSTest进行单元测试

发表于:2018-2-06 10:33  作者:天方   来源:博客园

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 软件测试工具 测试框架 单元测试

  我之前写过一篇XUNit的简介:使用Xunit来进行单元测试。Xunit在当时确实是一个最简单易用的测试框架,然而,随着发展,Xunit也变得复杂了不少,光写一个最简单的测试就要导入8个包。
  如果在大一点的项目中使用到还罢了,但如果只是随手想写一点单元测试引入这一堆包确实看着不大舒服。于是我又看了下MS自家的MS TEST。发现随着发展,MS自家的MS TEST也改变了不少,虽然以前用过老版MS TEST的朋友基本上能拿着就用,但本文这里仍然简单的介绍一下,方便新手上路。
  新的MS TEST现在是通过Nuget的包发布了,目前MS发布了两个版本:
  · MS TEST V1:V1的版本依赖于一个包: MSTest.TestFramework
  · MS TEST V2:V2的版本依赖于两个包: MSTest.TestFramework和MSTest.TestAdapter
  这两个版本使用起来还是大同小异的,MS TEST V2主要是为了.net core准备的,当然也可以在.net framework上运行,并且新加入了一些扩展。
  首先来写一个简单的用例:
[TestClass]
publicclassTestClass
{
[TestMethod]
publicvoidTestPass()
{
Assert.IsTrue(true);
}
[TestMethod]
publicvoidTestFail()
{
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.ThrowsException<InvalidOperationException>(() => foo());
void foo()
{
throw new InvalidOperationException();
}
}
  扩展:
  在MS TEST V2中,微软提供了一定的扩展支持,如下图所示(这些扩展也大部分支持MS TEST V1)
  具体包括如下几点:
  1、特性扩展:
  通过继承TestPropety,可以更方便的为测试用例添加描述。详情:RFC 001
  2、断言扩展:
  通过内置的断言扩展,可以更简洁的方式定制自己的断言API。详情:RFC 002
  3、执行扩展:
  MSTest V2允许我们在以下两个层级加入扩展。
  · 测试方法级别:允许创建自己的TestMethod特性,定制执行逻辑
  · 测试类级别:允许创建自己的TestClass特性,定制内部所有测试方法的执行逻辑
  数据驱动扩展:
  目前的MS TEST已经支持静态数据参数DataRow的支持,它的主要特点是:
  · 静态数据不能满足复杂的场景需要
  · 无法为多个用例共享
  如果需要更复杂的数据源,可以通过ITestDataSource接口实现。
  小结:
  MSTEST现在也非常简单易用了。不过感觉Xunit的功能还是要多些,例如XUNIT可以暂时跳过用例,也可以修改用例名称。我这里对MS TEST V2还处于管中窥豹的阶段,后面可能会在一些项目中尝试试用一下,可能还会写一些文章继续介绍它。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2018, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道