覆盖无效方法的内容
override a void-method's content
我正在使用 EasyMock 3+。
我正在测试一种方法,例如processMessage()
,这(将)满足我的测试,但在该方法的最后,此方法还调用了相同 class 的另一个方法 dispatchMessage(String msg)
。后一种方法采用 @EJB 注入对象,在这个测试中我真的不关心它。当然 - 此对象会导致 NullPointerException。
我如何使用 Easymock 模拟此方法以简单地忽略它的代码和 return 无效。即
void dispatchMessage(String msg){
return;
}
谢谢
对于模拟 void 方法,expectLastCall()
方法很有用,在这种情况下您不需要 return 任何东西,因为 return 类型是 void
基本上你需要做
mockObject.dispatchMessage(Easymock.anyObject(String.class));
Easymock.expectLastcall();
希望对您有所帮助!
祝你好运!
您可以使用 EasyMock 的部分模拟功能。
让我们假设以下 class:
public class ClassUnderTest {
@EJB
private SomeEJB someEJB;
public void processMessage() {
dispatchMessage("some message");
}
public void dispatchMessage(String msg) {
someEJB.dispatch(msg);
}
}
为了只测试方法 processMessage
你可以模拟 dispatchMessage
:
import org.easymock.EasyMockSupport;
import org.junit.Test;
public class ProcessMessageTest extends EasyMockSupport {
@Test
public void processMessage() throws Exception {
ClassUnderTest classUnderTest = createMockBuilder(ClassUnderTest.class)
.addMockedMethod("dispatchMessage")
.createMock();
classUnderTest.dispatchMessage("some message");
replayAll();
classUnderTest.processMessage();
verifyAll();
}
}
另一种选择是使用 PowerMock 框架,它与 EasyMock 配合得非常好,并且具有一些您可能会感兴趣的附加功能(例如模拟新对象创建或静态方法调用):https://code.google.com/p/powermock/wiki/MockPrivate
无需调用 replay
或 verify
。我是这样做的。添加了 @BeforeClass
注释。
InboundMDB inboundMock;
@BeforeClass
public void beforeClass() {
inboundMock = new InboundMDB();
}
然后创建了一个 EasyMock 构建器实例并添加了我不感兴趣的方法。现在,thi
IMockBuilder<InboundMDB> iMockBuilder = EasyMock
.createMockBuilder(InboundMDB.class);
inboundMock = iMockBuilder.addMockedMethod("dispatch")
.createMock();
后面是调用被测方法的代码(原objective)...
try {
inboundMock.processMessage(aMessage);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
当然,如果我省略部分模拟,它会像最初描述的那样抛出一个空指针异常。现在,它不再这样做了。都好。
我正在使用 EasyMock 3+。
我正在测试一种方法,例如processMessage()
,这(将)满足我的测试,但在该方法的最后,此方法还调用了相同 class 的另一个方法 dispatchMessage(String msg)
。后一种方法采用 @EJB 注入对象,在这个测试中我真的不关心它。当然 - 此对象会导致 NullPointerException。
我如何使用 Easymock 模拟此方法以简单地忽略它的代码和 return 无效。即
void dispatchMessage(String msg){
return;
}
谢谢
对于模拟 void 方法,expectLastCall()
方法很有用,在这种情况下您不需要 return 任何东西,因为 return 类型是 void
基本上你需要做
mockObject.dispatchMessage(Easymock.anyObject(String.class));
Easymock.expectLastcall();
希望对您有所帮助!
祝你好运!
您可以使用 EasyMock 的部分模拟功能。
让我们假设以下 class:
public class ClassUnderTest {
@EJB
private SomeEJB someEJB;
public void processMessage() {
dispatchMessage("some message");
}
public void dispatchMessage(String msg) {
someEJB.dispatch(msg);
}
}
为了只测试方法 processMessage
你可以模拟 dispatchMessage
:
import org.easymock.EasyMockSupport;
import org.junit.Test;
public class ProcessMessageTest extends EasyMockSupport {
@Test
public void processMessage() throws Exception {
ClassUnderTest classUnderTest = createMockBuilder(ClassUnderTest.class)
.addMockedMethod("dispatchMessage")
.createMock();
classUnderTest.dispatchMessage("some message");
replayAll();
classUnderTest.processMessage();
verifyAll();
}
}
另一种选择是使用 PowerMock 框架,它与 EasyMock 配合得非常好,并且具有一些您可能会感兴趣的附加功能(例如模拟新对象创建或静态方法调用):https://code.google.com/p/powermock/wiki/MockPrivate
无需调用 replay
或 verify
。我是这样做的。添加了 @BeforeClass
注释。
InboundMDB inboundMock;
@BeforeClass
public void beforeClass() {
inboundMock = new InboundMDB();
}
然后创建了一个 EasyMock 构建器实例并添加了我不感兴趣的方法。现在,thi
IMockBuilder<InboundMDB> iMockBuilder = EasyMock
.createMockBuilder(InboundMDB.class);
inboundMock = iMockBuilder.addMockedMethod("dispatch")
.createMock();
后面是调用被测方法的代码(原objective)...
try {
inboundMock.processMessage(aMessage);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
当然,如果我省略部分模拟,它会像最初描述的那样抛出一个空指针异常。现在,它不再这样做了。都好。