有什么方法可以给AutoFixture一个对象的实例并让它通过所有的setter并设置随机数据? wiki示例仅显示如何从AutoFixture获取实例,例如
var autoGeneratedClass = fixture.Create<ComplexParent>();
我的示例用例是一种工厂方法,它根据配置生成具有动态属性的对象实例。我想正确测试我的方法,检测并交互(例如复制)这些动态属性。
dynamic dynamicPropertyObject1 = factoryMethod(configuration);
dynamic dynamicPropertyObject2 = factoryMethod(configuration);
dynamicPropertyObject1.propA = random.Next();
dynamicPropertyObject1.CopyTo(dynamicPropertyObject2);
Assert.That(dynamicPropertyObject2.propA, Is.EqualTo(dynamicPropertyObject1.propA);
由于
答案 0 :(得分:2)
AutoFixture有很多用于创建对象的内置启发式方法,包括一些用于工厂方法的方法。
如果AutoFixture在类型上找不到公共构造函数,它会开始查找工厂方法;即返回定义该静态方法的类类型的对象的静态方法,例如
public class Foo
{
public static Foo CreateFoo();
// ... other members
}
另一方面,如果另一个类上存在工厂方法,则需要帮助AutoFixture一点。最简单的方法是使用Customize
方法:
fixture.Customize<Foo>(c => c
.FromFactory(() => FooFactory.CreateFoo())
.WithAutoProperties());
当您随后向Fixture
对象询问Foo
对象时,将调用FooFactory.CreateFoo()
,并且由于WithAutoProperties
该对象将填充由AutoFixture创建的数据