我正在使用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()”进行同样的测试时,它会通过。
希望这个例子可以帮助你理解我想要完成的任务。
答案 0 :(得分:13)
让这个工作。发布代码。
_someService.Received().NameStartsWith(Arg.Is<Person>(p => p.Name.Startswith== "A"));
希望这将有助于将来的某个人。