转载--XUNIT

http://www.51testing.com/html/89/n-3720289.html

使用Xunit进行单元测试


转载:作者:流空-C   来源:博客

  目前在.Net框架下的测试工具主要有Nunit、内置的MSTest以及Xunit这三个工具,本文就简单的介绍一下如何在VS中使用XUnit这个测试框架的后起之秀。
  安装Xunit:
  Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可:
  PM> install-package xunit -Version 2.1(我用的.Net4.5.2的,这里用2.2会安装失败,用2.1的,根据实际情况调整版本)
  PM> install-package xunit.runner.visualstudio(测试适配器,感觉这是个坑,没有这个无法进行测试,上面安装xunit时不会自动安装,而且没有任何提示)
  编写测试用例
  先写一个简单的待测试方法:
  public class Arithmetic
  {
  public int Add(int nb1, int nb2)
  {
  return nb1 + nb2;
  }
  }
  然后就是对该方法的测试用例了。
  [Fact]
  public void Add()
  {
  Arithmetic a = new Arithmetic();
  int res = a.Add(1, 2);
  Assert.Equal(3, res);
  }
  ps:测试类必须是public的,测试用例用FactAttribute标记。
  执行测试用例:
  运行:Ctrl+R,T
  调试:Ctrl+R,Ctrl+T
  测试结果输出:
转载--XUNIT
  异常测试
  Xunit并不是通过Attribute来标记异常捕获的,而是直接使用Assert.Throws断言函数来验证异常。
  准备一个没做检查的除法方法。
  public int Divide(int nb1, int nb2)
  {
  return nb1 / nb2;
  }
  捕获异常
  [Fact]
  public void Divide()
  {
  Arithmetic a = new Arithmetic();
  Assert.Throws<DivideByZeroException>(() => a.Divide(1, 0));
  }
  更改测试用例名称:
  [Fact(DisplayName = "除法测试")]
转载--XUNIT
  跳过测试用例:
  [Fact(Skip ="重构未完成")]
转载--XUNIT
  分组:
  [Fact]
  [Trait("Group", "Category")]
转载--XUNIT
  点击选择按特征分组
转载--XUNIT
  多场景参数情况:
  注意到测试代码中的参数和结果都写死了。如果我们要对多种情况进行测试,岂不是需要写多个单元测试方法或者进行多次方法执行和断言。这也太麻烦了。在XUnit框架中为我们提供了Theory特性。使用如下:
  [Theory]
  [InlineData(1, 2)]
  [InlineData(1, 0)]
  [InlineData(0, 2)]
  public void AddMultiple(int parmaA, int parmaB)
  {
  Arithmetic a = new Arithmetic();
  int res = a.Add(parmaA, parmaB);
  Assert.Equal(parmaA + parmaB, res);
  }
  测试完成执行--清除垃圾数据:
  我们一般的项目都离不开数据库操作,都是我们会发现,链接数据库操作时每测试一次都会产生对应的垃圾数据,为了避免对测试的无干扰性。我们需要在每次测试后清除垃圾数据。
  这里我们可以通过实现IDisposable接口进行垃圾数据的清理。
转载--XUNIT
  测试开始前执行--初始化数据:构造方法
  Stub:
  单元测试的定义与原则要求我们写的单元测试必须与外部环境、类别、资源、服务独立,不能直接相依。这样才是单纯的测试目标物件本身的逻辑是否符合预期。
  改写待测试方法:
转载--XUNIT