使用xUnit为.net core程序进行单元测试

发表于:2018-2-26 09:48

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

 作者:solenovex    来源:51Testing软件测试网采编

  一. 导读
  为什么要编写自动化测试程序(Automated Tests)?
  ●可以频繁的进行测试
  ●可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试。
  ●肯定比人工测试要快。
  ●可以更快速的发现错误。
  ●基本上是非常可靠的。
  ●测试代码与生产代码紧密结合。
  ●使得开发团队更具有幸福感!
  自动化测试的分类:
  纵轴表示测试的深度,也就是说测试的细致程度。
  横轴则表示测试的覆盖程度。
  ●Unit Test 单元测试, 它可以测试一个类,或者一个类的某个功能,它具有很好的深度,但是对整个应用来说它不具备很好的覆盖面。
  ●Integration Test 集成测试,它没有单元测试那么细致,但是具有相对较好的测试覆盖面。例如它可以测试功能的组合,以及像数据库或文件系统这样的外部资源等。
  ●Subcutaneous Test 皮下测试,这种测试作用于UI层的下面一层,这也意味着它对整个应用来说有很好的覆盖率,但是深度欠佳。那一个MVC结构的应用来说,它就是针对刚好在Controller下面一层的测试,对于Web service来说,它就是对节点下面那层的测试。
  ●UI测试,它的测试覆盖面很广,直接从UI层面进行测试,但是深度欠佳。
  从速度来看 单元是最快的,而UI测试是最慢的。
  从脆弱性来看 UI测试是最差的,程序修改后极有可能需要修改测试代码,而单元测试是最好的。
  是测试行为还是测试私有方法(private method)?
          public void IncreaseHeartBeatRate()
          {
              HeartBeatRate = CalculateHeartBeatRate() + 2;
          }
          private int CalculateHeartBeatRate()
          {
              var random = new Random();
              return random.Next(1, 100);
          }
  大多数情况下单元测试都应该是针对类的行为进行测试的,也就是public方法。当然也纯在不同的观点。
  如果想要对private方法进行测试的话,是有很多缺点的:
  ●首先需要修改方法的访问限制需要从private改为public,这就破坏了面向对象的封装性。
  ●再者,这其实测试的是类的具体实现细节,而不是类的行为。如果我们想要对类的内部进行重构的话,就会破坏测试,导致测试也必须重构。如果必须对private方法进行测试,那么首先建议您把private修饰符改成internal,然后修改该项目(project)的AssemblyInfo.cs,它在项目的Debug或者Release文件夹下。代码如下:
  [assembly: InternalsVisibleTo("Hospital.Tests")]
  这表示Hospital.Tests这个测试项目可以访问该项目生产代码(production code)的internal方法。
  测试的三个阶段 AAA
  ●Arrange,这里做一些先决的设定。例如创建对象实例,数据,输入等等。
  ●Act,在这里执行生产代码并返回结果。例如调用方法,或者设置属性(Properties)。
  ●Assert,在这里检查结果。测试通过或者失败。
  xUnit.net
  官网:https://xunit.github.io/
  xUnit是一个测试框架,可以针对.net/core进行测试。
  测试项目需引用被项目从而对其进行测试,测试项目同时需要引用xUnit库。测试编写好后,用Test Runner来运行测试。Test Runner可以读取测试代码,并且会知道我们所使用的测试框架,然后执行,并显示结果。目前可用的Test Runner包括vs自带的Test Explorer,或者dotnet core命令行,以及第三方工具,例如resharper等等。
  xUnit支持的平台:
  .net full, .net core, .net standard, uwp, xamarin.
  xUnit的例子:
          [Fact]
          public void TestIncreaseHeartBeatRate()
          {
              var patient = new Patient(); // Arrange
              patient.IncreaseHeartBeatRate(); // Act
              Assert.InRange(patient.HeartBeatRate, 40, 100); // Assert
          }
  安装配置xUnit.net
  a.使用Visual Studio 2017
  首先建立一个C# library项目,叫Hospital(下面部分截图有个拼写错误,应该是Hospital),然后建立一个xUnit Test项目,叫Hospital.Tests:
   
  可以看到Hospital.Tests已经包含里这几个库:
  然后为Hospital.Tests添加到Hospital项目的引用。
  b.使用.net core 命令行
  首先把刚才建立的Hospital.Tests项目移除(目录需要手动删除).
  然后打开项目位置:
  按住shift打开命令行:
  用命令行创建项目:
  创建 Hospital.Tests目录,进入目录,使用命令dotnet new xunit创建xUnit单元测试项目。
  添加项目的引用:
  最后添加项目到解决方案:
  回到VS界面,提示重新加载:
  确认后,VS中解决方案结构如:



上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号