我不知道如何使用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");
}
我尝试了模拟首选项,以及使用测试方法中的新对象初始化了首选项。
最佳答案
Mockito无法模拟Preferences.userNodeForPackage()
之类的静态方法。
我的建议是将这些静态调用包装到自定义类PreferenceManager
中,并将PreferenceManager
的实例注入到受测对象中。
然后,您可以模拟PreferenceManager
,注入模拟,并使其返回模拟Preferences
。