我不知道如何使用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

09-27 12:32