10

単体テストに NSubstitute を使用しています。テスト中のメソッド内の void メソッドにオブジェクトが送信されていることを確認する必要があります。プロパティの 1 つが特定の値であるオブジェクトが送信されていることを確認するだけで済みます。

例えば。

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

2つの簡単な方法

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 を使用して、「NameStartsWithA」が A で始まる名前で呼び出されたことを確認する必要があります。

これまでの私の単体テストは次のようになります

_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 に答える