如何使用随机值填充对象的实例?

时间:2015-02-27 13:28:31

标签: autofixture

有什么方法可以给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);

由于

1 个答案:

答案 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创建的数据