在单元测试公共方法时,是否可以使用其他公共方法进行验证

时间:2011-08-04 11:05:27

标签: unit-testing junit tdd

我正在尝试为我尚未实现的Queue类提供一个测试用例。在尝试编写testEnqueue方法的代码时,除了使用size()或dequeue()之外,我找不到验证方法。

使用其他公共方法(例如:size / dequeue)来验证同一类的公共方法(入队)的测试用例是否可以?

3 个答案:

答案 0 :(得分:3)

是的,它无疑是一种适当的验证方式。

答案 1 :(得分:2)

是的,通过对象的外部接口进行测试是理想的(与黑客入侵其内部进行验证)。只要测试了每个行为,就不应该有任何问题。如果Enqueue依赖于Size()并且已经证明Size已经按预期工作,那么你可以像你提到的那样安全地编写测试。

对于这个例子,我可能首先实现Size()[0元素,用1,n个元素创建的队列]。然后移动到Enqueue()并验证Size是否增加1。

你走在正确的轨道上。

答案 2 :(得分:1)

据我了解,您在此处看到了经典的鸡肉和鸡蛋问题 - 如何使用a()测试b()并验证其行为,然后使用b()测试a() 。从理论角度看,如果它们都不正确,那么测试可能仍会通过......这就像使用JUnit测试JUnit一样。

但是,如果您将代码视为黑盒(在执行TDD时就是这种情况)并且您只是编写测试来为您的类/单元提供一些输入并验证输出,那么这种方法没有任何问题。只记得测试所有典型的案例和角落案件/边境条件 - 如果它们符合您的业务预期,可能会出现什么问题?