我不知道如何在Preferences对象里面正确测试void方法,这是我想要测试的方法:
public void setPersonFilePath(File file, ViewGenerator viewGenerator) {
Preferences prefs = Preferences.userNodeForPackage(ViewGenerator.class);
if (file != null) {
prefs.put("filePath", file.getPath());
// Update the stage title.
viewGenerator.getPrimaryStage().setTitle("AddressApp - " + file.getName());
} else {
prefs.remove("filePath");
viewGenerator.getPrimaryStage().setTitle("AddressApp");
}
}
这是我的测试课:
private FileManager fileManger;
private File file;
private ViewGenerator viewGenerator;
private Preferences preferences;
@Before
public void prepareDependencies() {
MockitoAnnotations.initMocks(this);
fileManger = new FileManager();
file = mock(File.class);
viewGenerator = mock(ViewGenerator.class);
}
@Test
public void test() {
fileManger.setPersonFilePath(file, viewGenerator);
verify(preferences).remove("filePath");
}
我尝试过模拟首选项,以及在测试方法中使用新对象初始化首选项。
答案 0 :(得分:2)
Mockito无法模拟像Preferences.userNodeForPackage()
这样的静态方法。
我的建议是将这些静态调用包装到自定义类PreferenceManager
中,并将PreferenceManager
的实例注入到测试对象中。
然后你可以模拟PreferenceManager
,注入模拟,然后让它返回模拟Preferences
。