我们正在使用TDD和DI方法以及NSubstitute创建一个C#应用程序。
我们正在撰写CreateThing
方法:
name
和description
字符串作为参数Thing
对象Name
的{{1}}和Description
属性
Thing
设置为Status
Active
传递给另一个类上的方法(通过构造函数注入)以进行进一步处理我们知道如何使用Thing
和Substitute.For
为其他类的调用编写测试。
我们如何为正在设置的.Received()
属性编写测试?
答案 0 :(得分:3)
您可以使用Argument matchers即条件匹配器,它看起来像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)));
}
}