如何使用带有 AutoFixture 的自定义 SpecimenBuilder 创建对象的新实例
How to create new instances of objects with custom SpecimenBuilder with AutoFixture
目前我有这样的代码:
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
class 的新实例。我已经构建了自定义标本生成器来做到这一点。
但是没有像
这样的方法
Fixture.Create<T>(specimenBuilder)
所以我需要定制灯具。
"Fixture" 我的基础测试 class 的继承保护 属性 已经设置了一些自定义 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
属性使给定 ConnectedClient
的注入 IConnection
保持相同,这将避免对特定 ISpecimenBuilder
.
的需要
目前我有这样的代码:
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
class 的新实例。我已经构建了自定义标本生成器来做到这一点。
但是没有像
这样的方法Fixture.Create<T>(specimenBuilder)
所以我需要定制灯具。
"Fixture" 我的基础测试 class 的继承保护 属性 已经设置了一些自定义 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
属性使给定 ConnectedClient
的注入 IConnection
保持相同,这将避免对特定 ISpecimenBuilder
.