目前我有这样的代码。
private ConnectedClient WithConnection(IConnection connection)
{
var builder = new ClientWithConnectionSpecimenBuilder(connection);
Fixture.Customizations.Add(builder);
var client = Fixture.Create<ConnectedClient>();
Fixture.Customizations.Remove(builder);
return client;
}
基本上我需要创建新的实例 ConnectedClient
类在我的测试代码中指定连接。而且我已经建立了自定义的标本构建器来实现它。
但是没有类似于
Fixture.Create<T>(specimenBuilder)
所以我需要自定义夹具。
"夹具 "那里是我的基础测试类的继承保护属性,已经设置了一些自定义的AutoMoqData自定义,所以我需要重新使用它来创建对象。
应该可以使用一次性的 Build
方法来使用特定的样本构建器进行定制。
var client = fixture.Build<ConnectedClient>().FromFactory(builder).Create();
请注意,这样做将禁用夹具的任何其他定制。
DSL支持更多的自定义方法,可以使用 With
和 Without
所以如果你想在属性上做一些额外的定制,你可以这样做。
var client = fixture.Build<ConnectedClient>()
.FromFactory(builder)
.With(cc => cc.SomeProperty, () => fixture.Build<T>().FromFactory(otherFactory).Create())
.Create();
但是对于重要的自定义来说,这将会变得非常繁琐。Autofixture的意见是这样的。
该 Build
方法是真正的一次性解决方案。如果您想更多地依靠Autofixture的机器来完成所有的工作,那么您可以使用以下方法 除了 来创建客户端连接,我建议依靠现有的 Freeze
方法和 Frozen
属性,以保持注入的 IConnection
一样 ConnectedClient
这将消除对具体的 "三无 "产品的需求。ISpecimenBuilder
.