【发布时间】:2012-04-27 09:39:13
【问题描述】:
我想澄清 TDD 范围内的重构。
之前:
class Somclass{
public void sendMessage(){
WebServiceStub stub = new WebServiceStub();
...
stub.sendMsg();
}
}
之后:
class Somclass{
private WebServiceStub stub;
public void sendMessage(){
...
if(stub == null){
stub = new WebServiceStub();
}
...
stub.sendMsg();
}
}
所以我想验证 sendMsg() 方法并根据结果进行一些断言。为了有可能模拟这个存根,我将这个存根局部变量移动到实例变量。这样我就可以将模拟存根设置为类并在测试类中进行验证和断言。例如:
@Test
public void testSMth(){
wsProvider.setStub(stubMock);
verify(stubMock).sendMsg();
...asserts
}
这种方法不是线程安全的,我应该做一些并发修改。这种修改可能会导致错误。所以在局部变量approce中有线程安全。
我还可以创建将返回 WebServiceStub 实例的工厂。但是这种方法会产生新的类,因为这种情况很常见。
有个问题:这个case怎么测试,goot测试成本修改会不会出错?
【问题讨论】:
-
您正在混淆自己和其他使用“存根”来引用生成的 WebService 类的人。我知道这是经常使用的,但在单元测试上下文中,“存根”的含义完全不同。
标签: java refactoring mocking tdd mockito