模拟大型数据对象
本文关键字:对象 数据 大型 模拟 | 更新日期: 2023-09-27 17:53:55
我正在为我们的c#项目编写单元测试。在我测试的两个类中,我们有如下的方法:
public ClassWithLotsOfProperties doStuffINeedToTest(AnotherClassWithLotsOfProperties input)
{
//do stuff
}
我计划通过模拟一对AnotherClassWithLotsOfProperties
对象来测试它们,确保我知道当第一个对象传入时期望的ClassWithLotsOfProperties
对象,然后验证我得到了我正在寻找的结果。现在,我们的团队确信被测试的类工作正常,所以我正在运行程序,使其进入doStuffINeedToTest()
被调用的状态,并在方法的末尾设置一个断点,以便我可以写下方法的输入和输出对象的状态内的内容。
该方法的缺点是AnotherClassWithLotsOfProperties
和ClassWithLotsOfProperties
都有几十个属性,这意味着从调试器中写下它们的值,然后在单元测试中设置它们的模拟将是乏味的。有没有更快的方法来设置这些单元测试?现在,我在用NUnit和Moq。我们的团队想要坚持使用NUnit,但是我愿意看看另一个mock框架。
特别是,我认为最好的一件事是,如果我可以让Visual Studio或mock框架在我运行程序时自动为我生成mock对象,以设置我想要基于我的测试的方法调用。有办法做到这一点吗?
使用AutoFixture。这将使生成测试数据变得非常容易。下面是一个例子:
var testData = fixture.CreateAnonymous<ClassWithLotsOfProperties>();
基本上,它将迭代类的所有属性,并为每个属性设置该类型的值。 最后,我忍痛用手在代码中输入了所有的虚拟数据。现在测试完成,Just Works:3