推荐一个单元测试模拟框架:Nsubstitute

发表于:2012-5-07 10:57

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

 作者:可乐加冰    来源:51Testing软件测试网采编

  7)Received的使用

  另外,我们还可以检验替代对象的指定场景是否被调用,而哪些场景没有被调用,例如:

  calculator.Add(1, 2);
  calculator.Received().Add(1, 2);
  calculator.DidNotReceive().Add(5, 7);

  如果场景在之前没有被调用,Received() 断言则会失败。

  例如:calculator.Received().Add(2, 3);

  我们将会发现测试异常的提示信息如下:

测试方法 Calculator.Tests.ICalculatorTest.AddTest 引发了异常:
NSubstitute.Exceptions.ReceivedCallsException: Expected to receive a call matching:
Add(2, 3)
Actually received no matching calls.
Received 1 non-matching call (non-matching arguments indicated with '*' characters):
Add(*1*, *2*)

  NSubstitute支持设置参数返回值,并断言已经被调用。下面是更复杂的使用:

calculator.Add(10, -5);
calculator.Received().Add(10, Arg.Any<int>());//第二个参数的值为任一int类型的整数。
calculator.Received().Add(10, Arg.Is<int>(x => x < 0));//第二个参数的值必须是小于零,否则将报异常

  我们还可以使用替代对象的参数匹配及通过Returns()方法得到一些更多的行为:

//定义第一个参数及第二个参数为任意整数,并且返回值为两个参数之和。
calculator.Add(Arg.Any<int>(), Arg.Any<int>()).Returns(x => (int)x[0] + (int)x[1]);
Assert.AreEqual(calculator.Add(5, 10), 15);

  4、测试对象属性及事件委托

  1)定义一个接口:

public interface IPerson
    {
        string Name { get; set; }
        event EventHandler Sleep;
    }

  2)创建测试项目、及测试程序

  3)引用NSubstitute.dll,并声明命名空间

  首先,在C#测试源码文件添加命名空间引用

  using NSubstitute。

  4)创建接口实例

  target= Substitute.For<IPerson>();

  5)测试属性的读写操作

target.Name.Returns("小明");
//测试属性的读操作
Assert.AreEqual(target.Name, "小明");
//对属性进行写操作
target.Name = "王二";
Assert.AreEqual(target.Name, "王二");

  还可以使用Returns()设置的多个返回值序列

target.Name.Returns("A", "B", "C");
     Assert.AreEqual(target.Name, "A");
     Assert.AreEqual(target.Name, "B");
     Assert.AreEqual(target.Name, "C");

  6)测试事件

bool eventWasRaised = false;
//定义委托事件
target.Sleep += (sender, args) => eventWasRaised = true;
//触发事件
target.Sleep += Raise.Event();
//断言事件被触发
Assert.IsTrue(eventWasRaised);

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号