在接收调用中将对象作为参数的NSubstitute

时间:2013-01-29 06:45:25

标签: unit-testing nsubstitute

我正在使用NSubstitute进行单元测试。我需要检查一个对象是否发送到我正在测试的方法中的void方法。我只需要检查对象是否发送了一个属性是某个值。

例如

///The object in question
public class Person
{
   public string Name { get; set; }
   public string Surname{get;set;}
}

两种简单的方法

public void NameStartsWithA(Person person)
{
  //do something to person when name starts with A
}

public void NameStartsWithB(Person person)
{
  //do something to person when name starts with B
}

我正在编写测试的方法。

public void MethodBeingTested()
{
  var person = new Person() {Name = "Adrian",Surname="SomeSurname"};

  if(person.Name.StartsWith("A"))
    NameStartsWithA(person);
  else
    NameStartsWithB(person);
}

如果人名以A开头,我需要检查,使用NSubstitute调用名称以A开头的“NameStartsWithA”。

到目前为止我的单元测试看起来像这样

_someService.Received().NameStartsWithA(new Person(){Name="Adrian",Surname=Arg.Any<string>()});

但是Nsubstitute说这个函数从未被调用过,但是当我用“RecievedArgumentsAny()”进行同样的测试时,它会通过。

希望这个例子可以帮助你理解我想要完成的任务。

1 个答案:

答案 0 :(得分:13)

让这个工作。发布代码。

_someService.Received().NameStartsWith(Arg.Is<Person>(p => p.Name.Startswith== "A"));

希望这将有助于将来的某个人。