1

我们正在使用 TDD 和 DI 方法以及 NSubstitute 创建一个 C# 应用程序。

我们正在编写一个CreateThing方法:

  • namedescription字符串作为参数
  • 创建一个新Thing对象
  • 从方法参数中设置NameDescription属性Thing
  • 设置StatusActive
  • 将 传递Thing给另一个类的方法(通过构造函数注入)以进行进一步处理

Substitute.For我们知道如何使用and来编写对另一个类的调用的测试.Received()

我们如何为Thing正在设置的属性编写测试?

4

1 回答 1

3

您可以使用参数匹配器,即看起来像的条件匹配器Arg.Is<T>(Predicate<T> condition)。您的匹配器可能如下所示:

anotherClass.Received().Process(Arg.Is<Thing>(thing => !string.IsNullOrEmpty(thing.Name)));

完整清单:

public class Thing
{
    public string Name { get; set; }
}

public class AnotherClass
{
    public virtual void Process(Thing thing)
    {
    }
}

public class CreateThingFactory
{
    private readonly AnotherClass _anotherClass;

    public CreateThingFactory(AnotherClass anotherClass)
    {
        _anotherClass = anotherClass;
    }

    public void CreateThing()
    {
        var thing = new Thing();
        thing.Name = "Name";
        _anotherClass.Process(thing);
    }
}

public class CreateThingFactoryTests
{
    [Fact]
    public void CreateThingTest()
    {
        // arrange
        var anotherClass = Substitute.For<AnotherClass>();
        var sut = new CreateThingFactory(anotherClass);

        // act
        sut.CreateThing();

        // assert
        anotherClass.Received().Process(Arg.Is<Thing>(thing => !string.IsNullOrEmpty(thing.Name)));
    }
}
于 2014-07-09T16:38:08.787 回答