模拟大型数据对象

时间:2013-01-16 02:00:08

标签: c# unit-testing mocking

我正在为我们的C#项目编写单元测试。在我正在测试的几个类中,我们有类似的方法:

public ClassWithLotsOfProperties doStuffINeedToTest(AnotherClassWithLotsOfProperties input)
{
    //do stuff
}

我打算通过模拟几个AnotherClassWithLotsOfProperties对象来测试它们,确保我知道第一个对象传入时期望的ClassWithLotsOfProperties个对象,然后验证我得到的结果我在找。现在,我们的团队确信正在测试的类正常工作,所以我正在运行程序,将其调用到调用doStuffINeedToTest()的状态,并在方法结束时设置断点,以便我可以写下方法的输入和输出对象的状态。

这种方法的缺点是AnotherClassWithLotsOfPropertiesClassWithLotsOfProperties都有几十个属性,这意味着从调试器写下它们的值然后在单元测试中设置它们的模拟将是乏味。有没有更快的方法来设置这些单元测试?现在,我正在使用NUnit和Moq。我们的团队希望坚持NUnit,但我愿意看看另一个模拟框架。

特别是,我认为一件好事是,如果我可以让Visual Studio或模拟框架自动为我生成模拟对象,当我运行程序来设置方法调用时,我想基于我的测试。有什么方法可以做这样的事吗?

2 个答案:

答案 0 :(得分:4)

使用AutoFixture。它将使生成测试数据变得非常容易。这是一个例子:

var testData = fixture.CreateAnonymous<ClassWithLotsOfProperties>();

基本上它将迭代类的所有属性,并为每个属性设置该类型的值。

答案 1 :(得分:0)

最后,我咬了一下子弹并手动输入了我代码中的所有虚拟数据。现在测试结束了Just Works:3