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

问题描述 投票:0回答:1

有什么方法可以给 AutoFixture 一个对象实例并让它遍历所有设置器并设置随机数据? 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);

谢谢

c# autofixture
1个回答
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 创建的数据。

© www.soinside.com 2019 - 2024. All rights reserved.