【问题标题】:NSubstitute with object as parameter in Received callNSubstitute 以对象作为 Received 调用中的参数
【发布时间】:2013-01-29 06:45:25
【问题描述】:

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

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

【问题讨论】:

    标签: unit-testing nsubstitute


    【解决方案1】:

    让这个工作。发布代码。

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

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

    【讨论】:

    • 很高兴你能成功。您可以尝试的另一种方法是修改MethodBeingTested 以将Person 作为参数。然后,您可以通过一个名字以“A”开头的人并检查_someService.Received().NameStartsWithA(person)(对于“B”也是如此)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多