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

Cap*_*in0 10 unit-testing nsubstitute

我正在使用NSubstitute进行单元测试.我需要检查一个对象是否发送到我正在测试的方法中的void方法.我只需要检查对象是否与其中一个属性为特定值一起发送.

例如.

///The object in question
public class Person
{
   public string Name { get; set; }
   public string Surname{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

两个简单的方法

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
}
Run Code Online (Sandbox Code Playgroud)

我正在编写测试的方法.

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

  if(person.Name.StartsWith("A"))
    NameStartsWithA(person);
  else
    NameStartsWithB(person);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

但是Nsubstitute说这个函数从未调用过,但是当我用"RecievedArgumentsAny()"进行相同的测试时,它就会通过.

希望这个例子可以帮助你理解我想要完成的事情.

Cap*_*in0 14

让这个工作.发布代码.

_someService.Received().NameStartsWith(Arg.Is<Person>(p => p.Name.Startswith== "A"));
Run Code Online (Sandbox Code Playgroud)

希望这将有助于未来的人.