【发布时间】:2018-06-30 07:27:32
【问题描述】:
我有一个基本的Widget 类,它使用实用程序类Utils
public class Widget {
private static final String BUTTON_KEY = Utils.getMessage("btn-key");
public boolean comp() {
String specialKey = Utils.getMessage("special-key");
return specialKey.equals(BUTTON_KEY);
}
}
class Utils {
public static String getMessage(String key) {
return key + " : message";
}
}
我想为comp 方法创建一个测试。
我的测试是这样的
@RunWith(PowerMockRunner.class)
@PrepareForTest(Utils.class)
public class WidgetTest {
private Widget widget;
@Before
public void setUp() {
mockStatic(Utils.class);
widget = new Widget();
}
@Test
public void testComp() {
expect(Utils.getMessage("btn-key")).andReturn("btn-key : message");
expect(Utils.getMessage("special-key")).andReturn("special-key : message");
replayAll();
assertFalse(widget.comp());
verifyAll();
}
}
测试失败
java.lang.IllegalStateException: missing behavior definition for the preceding method call:
Utils.getMessage("btn-key")
Usage is: expect(a.foo()).andXXX()
如果我删除常量字段中的方法调用(并因此删除对它的期望)测试成功。
有什么问题?
【问题讨论】:
-
我不敢说,但由于
BUTTON_KEY的静态初始化,您的Widget类不可测试。
标签: java junit powermock easymock