1

Just having a conversation with someone in the office about using a business logic class to build up some data in order to test another class.

Basically, he has class A which takes a complex type as a parameter and then generates a collection of a different complex type as a result. He's written tests around this class already. Now he's moved on to testing another class (class B) which takes the result of class A then performs some logic on it.

He's asked the question, "should I use class A to build up a scenario to test class B with".

At first I said yes as class A has tests around it. But then I figured well what if there's some bugs in class A that we haven't found yet... so I guess there must be a better way to address this scenario.

Does anyone have any thoughts on this? Is it OK to use existing logic to save time writing other tests?

Regards,

James

4

2 回答 2

2

对此的立场可能会有所不同。通常,如果代码经过测试并且您认为它可以工作,那么您可以自由使用它。在使用已经测试过的方法来帮助测试其他方法(在单个类/单元内)时尤其如此。但是,由于这种情况发生在单个单元中,因此与您的情况有些不同。

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

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

于 2012-04-10T16:23:05.543 回答
0

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

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

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

于 2012-04-10T15:29:54.473 回答