C#常用单元测试框架比较:XUnit, NUnit, 和 Visual Studio(MSTest)

发表于:2017-7-19 10:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:RobotZero    来源:博客

#
NUnit
#
xUnit
分享:
  做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处。
  地址在这里:http://www.tuicool.com/articles/F3eEn2j
  简而言之,除了标注测试类和方法的特性用的不一样之外,XUnit 和 NUnit 是非常相似的,而它们比MSTest最大的不同处就是多了传值测试,如下所示:
  [TestCase(1)]
  [TestCase(2)]
  [TestCase(3)]
  [TestCase(4)]
  public void FireMultipleTimes(int fireCount) {
  Bug bug = new Bug();
  Raygun gun = new Raygun();
  for(int i = 0; i < fireCount; i++) {
  gun.FireAt(bug);
  }
  if (fireCount >= 3) {
  Assert.IsFalse(gun.HasAmmo());
  }
  else {
  Assert.IsTrue(gun.HasAmmo());
  }
  }
  上面是NUnit的,XNunit也有类似的方法。
  这篇文章非常适合刚入门单元测试的同学看,有空的话我会翻译一下(不过其实里面都有源码截图,不看文章光看图也没什么问题)。
  个人常用的是MSTest,不过包括Abp在内的开源框架用的都是XUnit或NUnit,
  在网上调查了一下,关于MSTest的负面评论还是比较多的,最主要的问题就在于MSTest的弹性不够好,
  它无法在非微软的平台上运行单元测试,不过在 .Net Core日渐成熟的今天,我觉得现在已经不是问题了。  
  补充:又去StackOverflow转了一圈,发现其实MSTest也添加了类似的功能如下
  [TestClass]
  public class UnitTest1
  {
      [DataTestMethod]
      [DataRow(1, 2, 2)]
      [DataRow(2, 3, 5)]
      [DataRow(3, 5, 8)]
      public void AdditionTest(int a, int b, int result)
      {
          Assert.AreEqual(result, a + b);
      }
  }
  现在来看,几乎这些框架都没差了,在StackOverflow看到一条我很赞同的看法:
  其实不用顾虑那么多,随便选择吧,MSTest对Vs的集成是最好的,而且也很容易上手,如果哪一天碰到它所无法解决的事情,切换到其他框架也非常简单,仅仅只是Nuget下个包,换下特性而已。
  的确是这样,所以不必在这方面劳力伤神,如果自己对单元测试框架没有什么经验,那就选择官方的吧,如果某一天真的碰见了瓶颈,切换就好。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号