我想模拟对象数据,而不是对象本身。换句话说,我想生成一个包含n个对象的集合,并将其传递给一个函数,该函数生成随机数据字符串和数字。有没有什么方法可以做到这一点?可以将其视为对象数据的Lorem Ipsum。数值范围等限制并非必需,但会是一个额外的奖励。
还有一个微软研究项目Pex,可能与您所想的接近:
http://research.microsoft.com/en-us/projects/Pex/
"……Pex可以找到您的方法的有趣输入输出值,您可以将其保存为具有高代码覆盖率的小型测试套件。Microsoft Pex是用于测试.NET Framework应用程序的Visual Studio插件。"[TestMethod]
public void IntroductoryTest()
{
// Fixture setup
Fixture fixture = new Fixture();
int expectedNumber = fixture.CreateAnonymous<int>();
MyClass sut = fixture.CreateAnonymous<MyClass>();
// Exercise system
int result = sut.Echo(expectedNumber);
// Verify outcome
Assert.AreEqual<int>(expectedNumber, result, "Echo");
// Teardown
}
看起来还有一个 .NET 版本的 Ruby Faker
gem,它在 Ruby 中用于伪造假数据对象。我没有使用过它,但值得一试:
ObjectRandomizer
类,该类接受一个对象数组,使用反射检查对象的私有成员,然后使用反射为该成员设置随机值。这仅适用于您不关心每个对象的随机数据长什么样子的情况。Person
类,则可以在测试程序集中拥有一个PersonRandomizer
类。在您的测试类(或Randomizer
类)中,然后可以使用反射查找类型PersonRandomizer
,如果存在,则调用PersonRandomizer.Randomize(Person p)
。IRandomizable
,或使用一个新属性Randomizable
标记它们,以便您可以在运行时检测到它们。