10

我正在使用 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()”进行相同的测试时,它通过了。

希望这个例子能帮助你理解我想要完成的事情。

4

1 回答 1

18

让它工作。发布代码。

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

希望这对将来的某人有所帮助。

于 2013-01-29T11:42:40.357 回答