我应该为其他测试代码调用的代码编写测试

时间:2013-11-03 01:17:03

标签: unit-testing tdd bdd

如果我有两个类:ClassA和ClassB。

ClassA在ClassB上调用公共方法,即在ClassA中:

public function foo()
{
    $this->classB->bar();
}

我有测试覆盖foo - 但是我是否应该总是在b类中编写覆盖bar的测试?

鉴于代码是直接测试我不确定这是否值得?

3 个答案:

答案 0 :(得分:1)

另一种看待它的方式是根据班级的责任 应该通过测试来确定这一责任。

Class可以是ClassA或ClassB等 编写测试以断言A类的责任 编写测试以断言B类的责任

将其与视图相结合,即存在依赖关系和对象映射 您自然会覆盖依赖项的测试,然后更高级地将对象映射跟踪到根

简而言之 B级需要进行测试 取决于B类某些能力的A类需要自己的测试

注意:每个人的责任/能力都不同

答案 1 :(得分:0)

是的,写下测试。否则,classB :: bar()不可重用(甚至可用)。

如果bar是ClassA的私有方法,则不必。

答案 2 :(得分:0)

是的,你也应该测试吧。您的所有类都应该有自己的测试用例,您可以在其中测试其公共方法。因此,对于classB,您应该有一个单独的测试用例,您可以在其中测试方法bar()。

原因是当方法bar()(或bar()调用的另一个classB方法中发生错误时,你的测试将在方法foo()失败,这可能会造成错误并导致更多时间在方法栏()中找到实际错误。在您的示例中可能不会出现问题,但在现实世界中,您可以测试更复杂的代码。

另一个原因是测试的复杂性。您的测试应该在所有可能的情况下测试您的方法。可以说,函数bar()可以在5种不同的情况下进行测试,并且foo()也可以在自己的5种情况下进行测试。如果您只测试foo(),则必须编写一个测试来覆盖5 * 5 = 25个案例。如果foo()更复杂,并称为另一种方法,让我们说classB-> bar2()与另外5种不同的情况,你将不得不写一个涵盖5 * 5 * 5 = 125个案例的测试!编写3个测试要轻松5个案例,而不是1个测试覆盖125个案例。这3个测试也更容易阅读和维护。