如何断言POCO的属性是在被测试的方法中设置的

本文关键字:测试 方法 设置 属性 断言 POCO 何断言 | 更新日期: 2023-09-27 18:12:06

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

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

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

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

我们如何为Thing属性编写测试?

如何断言POCO的属性是在被测试的方法中设置的

你可以使用参数匹配器,即条件匹配器,看起来像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)));
    }
}