我目前正在以TDD的方式编写JDBC驱动程序的实现(是的,你没看错),虽然我目前只完成了类存根和一些小的功能,但我突然想到,由于Statement是PreparedStatement的超类,而PreparedStatement又是CallableStatement的超类,当我真正开始为这些类的实现编写测试时,我应该做什么呢?
以下是我可以采取的方法:
1. 为Statement创建一个测试套件,然后扩展该套件以进行PreparedStatement和CallableStatement的其他测试。
2. 忽略从超类继承的方法,分别测试每个实现。
3. 为每个实现类严格测试每个方法。毕竟,有些继承的方法在不同的实现中可能有所不同。稍微变化一下,我将测试实现使用的所有继承方法。
我觉得第二个方法最自然,但由于我提出的原因,我不确定是否明智这样做。那么,您认为我应该怎么做呢?
以下是我可以采取的方法:
1. 为Statement创建一个测试套件,然后扩展该套件以进行PreparedStatement和CallableStatement的其他测试。
2. 忽略从超类继承的方法,分别测试每个实现。
3. 为每个实现类严格测试每个方法。毕竟,有些继承的方法在不同的实现中可能有所不同。稍微变化一下,我将测试实现使用的所有继承方法。
我觉得第二个方法最自然,但由于我提出的原因,我不确定是否明智这样做。那么,您认为我应该怎么做呢?
A
和子类B
和C
。A
有一个方法a()
,B
和C
都没有重写它。你的意思是,尽管如此,我的测试需要测试A.a()
、B.a()
、C.a()
,即使它正在测试完全相同的方法(B
和C
都没有重写它,只是继承它)三次??我猜在测试时就不要考虑 DRY 原则了。 - Don Cheadle