使用mockito测试java.util.prefs.Preferences void方法

时间:2015-06-22 16:57:31

标签: java testing mockito preferences

我不知道如何在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");
}

我尝试过模拟首选项,以及在测试方法中使用新对象初始化首选项。

1 个答案:

答案 0 :(得分:2)

Mockito无法模拟像Preferences.userNodeForPackage()这样的静态方法。

我的建议是将这些静态调用包装到自定义类PreferenceManager中,并将PreferenceManager的实例注入到测试对象中。

然后你可以模拟PreferenceManager,注入模拟,然后让它返回模拟Preferences