【发布时间】:2017-05-05 04:22:38
【问题描述】:
我刚刚编写了示例测试用例,我想在其中模拟一个 void 实例方法。我很惊讶,我的测试用例没有调用 expectLastCall 方法就通过了。我想知道,在模拟实例 void 方法时不需要调用 expectLastCall 吗?
StringUtil.java
package com.sample.util;
import com.sample.model.MethodNotImplementedException;
public class StringUtil {
public String toUpperAndRepeatStringTwice(String str) {
String upperCase = str.toUpperCase();
sendStringToLogger(upperCase);
return upperCase + upperCase;
}
public void sendStringToLogger(String str){
throw new MethodNotImplementedException();
}
}
StringUtilTest.java
package com.sample.util;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ StringUtil.class })
public class StringUtilTest {
@Test
public void toUpperAndRepeatStringTwice() {
StringUtil stringUtil = PowerMock.createPartialMock(StringUtil.class, "sendStringToLogger");
String str = "HELLO PTR";
stringUtil.sendStringToLogger(str);
//PowerMock.expectLastCall().times(1);
PowerMock.replayAll();
String result = stringUtil.toUpperAndRepeatStringTwice("hello ptr");
assertEquals(result, "HELLO PTRHELLO PTR");
}
}
【问题讨论】:
-
我想你会找到答案here
-
只是好奇:您在这里使用 PowerMock 做什么? Mockito 应该能够很好地模拟或监视您的
StringUtil而无需诉诸 PowerMock...我在这里错过了一个用例吗? -
我正在使用 PowerMock 和 EasyMock。只是为了实验
-
@HariKrishna 不要。仅在绝对必要时才使用 PowerMock(因为您必须测试一些您无法更改的第 3 方代码)。如果您正在 实验 / 学习 ...那么建议:选择 Mockito 或纯 EasyMock。了解如何正确使用这些框架,并学习如何编写易于测试的代码。
-
感谢@GhostCat,但如果我没记错的话,PowerMock 是其他 Mocking 框架(如 Mockito 或 EasyMock)的扩展。我们可以使用 PowerMock+EasyMock(或)PowerMock+Mockito 对。如果我错了,请纠正我。
标签: java junit powermock easymock