我想模拟对象数据,而不是对象本身。换句话说,我想生成一个包含n个对象的集合,并将它传递给一个产生随机数据字符串和数字的函数。有什么要做的吗?将其视为对象数据的Lorem Ipsum。数字范围的限制等是没有必要的,但是会是一种奖励。模拟对象数据
模拟对象数据
回答
当我读到你的问题时,我想到的第一件事就是QuickCheck,它是Haskell的测试工具。在QuickCheck中,您可以指定函数应该具有的属性(不变量),并且可以指定输入的有效范围(以及更多功能),QuickCheck将生成一堆随机输入数据并将其放入函数中,并检查是否太多如果输出符合规范。附近有一座小我发现收口有它的一个F#端口,以便快速检查在.NET世界的存在:
还有一个MS研究项目的Pex,可能是靠近你在想什么:
http://research.microsoft.com/en-us/projects/Pex/
” ...的Pex找到你的方法,你可以保存为一个小的测试套件具有高的代码覆盖率有趣的投入产出值Pex的微软是一个Visual Studio插件进行测试。 .NET Framework应用程序“。
我以前没有使用过它,但它看起来好像用于生成边界案例数据,可以执行函数的任何和所有分支。它实际上分析了一个功能,而不是仅仅在其上投掷真正随机的东西。
对于我的测试,我只是为我创建的所有类添加一个方法,并将其称为随机化。每个班级都知道该班级对象的法律数据应该是什么样子。创建对象后,只需调用其randomize方法,以随机模拟数据填充它。您还可以添加专门的方法来根据约束生成随机数据字符串或数字,并且可以在所有类中共享这些专用方法。
我想过在基类上做这件事,并使用反射来生成足够的数据,但我想要一些已经存在并且可以插入的东西。也许这是我应该创建的东西。 – 2010-05-12 18:50:56
您可以设置一个ObjectRandomizer
类,该类需要一个对象数组,使用反射检查私有成员的对象,然后使用反射为该成员设置一个随机值。这只有在你不关心每个对象的随机数据是什么样子的情况下才有效。
或者,您可以为每个为其生成随机数据的数据对象构建一组类。如果您不想在实际程序集中包含随机生成方法,这可能会奏效。例如,如果您有一个Person
类,则可以在测试程序集中包含一个PersonRandomizer
类。在您的测试课程(或Randomizer
课程)中,您可以使用反射来查找PersonRandomizer
类型,如果存在,请致电PersonRandomizer.Randomize(Person p)
。
如果你遵循yahya的建议,我建议为支持随机化的对象创建一个接口IRandomizable
,或者使用您可以在运行时检测到的新属性Randomizable
来标记它们。
似乎还有一个Ruby端口的Ruby Faker
gem,它在Ruby中获得了很多用于伪装假数据对象的用法。我没有用它,但它可能是值得探讨:
我很惊讶,没有人提到AutoFixture尚未:
[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
}
- 1. 用犀牛模拟模拟数据库对象
- 2. 模拟对象
- 3. 模拟C++对象
- 4. junit模拟对象
- 5. 模拟WP_REST_Request对象
- 6. 如何模拟一个模拟对象返回的对象?
- 7. 如何在模拟对象内创建一个模拟对象?
- 8. 测试模拟对象构造函数
- 9. 模拟控制器与对象参数
- 10. 函数编程和模拟对象
- 11. Dillemma使用模拟对象
- 12. 模拟对象的标准
- 13. 如何模拟对象?
- 14. 模拟对象和接口
- 15. Raphaël对象:模拟点击
- 16. 用途()模拟对象
- 17. googlemock:模拟本地对象
- 18. RSpec模拟对象示例
- 19. 模拟参考对象
- 20. 模拟对象查询
- 21. PHPUnit模拟对象方法
- 22. 模拟对象的创建
- 23. Jmock模拟DAO对象
- 24. 用PHPUnit的模拟对象传递类型对象的参数
- 25. 对象模拟使用数据工厂家伙插件
- 26. JMock模拟对象可以返回另一个模拟对象吗?
- 27. 数据库模式对象抽象
- 28. 从拟合对象中取得拟合数据
- 29. 模拟PHPUnit中的对象来模拟静态方法调用?
- 30. 如何模拟注入模拟对象的方法
这看起来(几乎)一样的副本http://stackoverflow.com/questions/591892/tools-for-generating-mock-data。 – 2010-05-12 18:29:25
@Jeremy这些是针对数据库的。我正在寻找与纯物体相关的solutiosn。 – 2010-05-12 18:50:00
是的,但该线程中的某些答案在去数据库之前创建对象。我认为有足够的重叠,值得指出而没有标记。 – 2010-05-12 19:15:46