如何断言POCO的属性是在被测试的方法中设置的
本文关键字:测试 方法 设置 属性 断言 POCO 何断言 | 更新日期: 2023-09-27 18:12:06
我们正在使用TDD和DI方法以及NSubstitute创建一个c#应用程序。
我们正在编写一个CreateThing
方法:
-
name
和description
字符串作为参数 - 创建新的
Thing
对象 - 从方法参数 设置
- 设置
Status
为Active
- 将
Thing
传递给另一个类的方法(通过构造函数注入)以进行进一步处理
Thing
的Name
和Description
属性我们知道如何通过使用Substitute.For
和.Received()
来编写对另一个类调用的测试。
我们如何为Thing
属性编写测试?
你可以使用参数匹配器,即条件匹配器,看起来像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)));
}
}