在测试类中重用业务逻辑以节省时间

时间:2012-04-10 15:18:40

标签: unit-testing

与办公室的某个人讨论如何使用业务逻辑类来构建一些数据,以便测试另一个类。

基本上,他有A类,它将复杂类型作为参数,然后生成一个不同复杂类型的集合。他已经围绕这门课写了测试。现在他开始测试另一个类(B类),它接受类A的结果,然后对它执行一些逻辑。

他问了一个问题,“我是否应该使用A类来构建一个测试B类的场景”。

起初我说是的,因为A级围绕它进行了测试。但是我很清楚如果A类中有一些我们还没有发现的错误...所以我想必须有更好的方法来解决这个问题。

有没有人对此有任何想法?是否可以使用现有逻辑来节省编写其他测试的时间?

此致

詹姆斯

2 个答案:

答案 0 :(得分:2)

对此的立场可能有所不同。通常,如果代码经过测试并且您认为它可以正常工作,那么您可以自由使用它。使用already tested methods to help with testing others(在单个类/单位内)时尤其如此。但是,由于这种情况发生在单个单元中,因此与您的情况略有不同。

现在,在处理2个单独的课程时,我会说你应该避免这种方法。纯粹是因为这两个类可能没有明显的相关性或它们的上下文/使用范围可能大不相同。就像在,有人可能会在不知道B级存在的情况下改变A级。即使没有对B代码进行任何更改,B类测试也会突然中断。这会带来不必要的混乱,并且是您通常不希望自己陷入困境的情况。

相反,我建议在测试的B类文件中创建辅助方法。使用存根/假货和AutoFixture之类的工具,您应该能够轻松地重现A类使用的生成逻辑,并在B类测试中包含您自己的“副本”。

答案 1 :(得分:0)

为了测试B类,应该在测试中的某个地方复制从A类返回的结果。如果A类返回一个人员列表,您将在测试中返回一个帮助函数,返回一个假List<Person>用于您的测试。 因为您只测试B类,所以不应在测试中使用A类。

NUnit提供内置功能,以便为您的测试提供数据,请查看: http://www.nunit.org/index.php?p=testCaseSource&r=2.5

或者您可以使用返回测试中将使用的数据(简单对象,集合等等)的方法创建一个DataFactory类。