elf*_*elf 1 java testing stubs
我在http://xunitpatterns.com/Test%20Stub.html上阅读并对存根的使用有一些疑问,例如,在页面上显示的代码中,作者创建了一个TimeProviderTestStub.java在测试代码中使用的类.我对测试代码中的这一行有一些疑问:
TimeDisplay sut = new TimeDisplay();
// Test Double installation
sut.setTimeProvider(tpStub);
Run Code Online (Sandbox Code Playgroud)
我是否需要修改我的类(SUT)来接收一个对象TimeProviderTestSub?
无论是存根和真正的类都应该实现一些接口,即ITimeProvider和setTimeProvider()应采取这个接口作为它的参数.接口必须公开SUT需要与对象交互的所有方法,因为TimeDisplay现在只能通过ITimeProvider接口使用对象(这允许我们在测试中使用存根而不是真实对象).
在示例中,SUT(TimeDisplay)似乎只需要该getTime()方法,因此接口应该只包含该方法:
public interface ITimeProvider {
Calendar getTime();
}
Run Code Online (Sandbox Code Playgroud)
存根的声明应该是
public class TimeProviderTestStub implements ITimeProvider { ... }
Run Code Online (Sandbox Code Playgroud)
并且应该是真实阶级的宣言
public class TimeProvider implements ITimeProvider { ... }
Run Code Online (Sandbox Code Playgroud)
最后,SUT必须更改其setter方法以接受接口:
public void setTimeProvider(ITimeProvider timeProvider) { ... }
Run Code Online (Sandbox Code Playgroud)
并且还将其内部timeProvider字段更改为类型ITimeProvider.
如果你不控制真实类的代码(这样你就不能让它实现接口),你可以创建一个包装真实类并实现接口的适配器类.
| 归档时间: |
|
| 查看次数: |
3310 次 |
| 最近记录: |