0
我正在编写单元测试,其中SUT(被测系统)可以承担各种不同的配置。我决定(或尝试)采取另一种更清洁的方法,而不是为每个组合添加参数。对于那些不知道的,Fixture
对象来自一个名为AutoFixture的库,它处理播种随机测试值。如何通过参数执行其他对象配置?
这是我失败的测试 -
[Test]
public void Test()
{
var locate = Build(x => x.With(xx => xx.TicketNo, 123));
Assert.AreEqual(123, locate.TicketNo);
}
private Locate Build(Action<ICustomizationComposer<Locate>> customizationAction)
{
var fixture = new Fixture();
var customizationComposer = fixture.Build<Locate>();
customizationAction(customizationComposer);
var postProcessComposer = customizationComposer
.Without(x => x.Attachments)
.Without(x => x.Comments)
.Without(x => x.Reviews)
.Without(x => x.ScheduledCrew)
.Without(x => x.PendingDecision)
.Without(x => x.FinalDecision)
.Without(x => x.ConflictResolution);
return postProcessComposer.Create();
}
就可以了,我尝试使用Build
方法来创建一个Locate
对象与一组忽略通过Without
方法调用规则。这是我为每个测试需要的基线对象。每个测试都可以通过With
方法调用忽略其他字段或硬代码字段值。
我期望通过,因为我设置了Build
lambda参数,将TicketNo
属性设置为123.相反,测试失败,因为AutoFixture使用随机整数种子TicketNo
。
我该如何做到这一点?