小编典典

如何使用JUnit测试特定于操作系统的方法?

java

我想用JUnit测试以下方法:

private static boolean systemIsWindows() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.startsWith("win");
}

坦白说,我想出的唯一一件事就是基本上将相同的逻辑复制到测试中。当然,这可以防止方法被意外破坏,但是听起来有点违反直觉。

有什么更好的方法来测试此方法?


阅读 204

收藏
2020-11-30

共1个答案

小编典典

在单元测试中,您可以更改属性的值:

System.setProperty("os.name", "Linux")

然后,您可以测试/调用您的systemIsWindows()方法以使用断言检查其返回的内容。

为了更容易设置System属性并在测试完成时取消设置该属性(从而促进测试隔离,自我约束),可以使用以下两个JUnit附加组件:

例如:

@Test
@SystemProperty(name = "os.name", value = "Windows")
public void aTest() {
    assertThat(systemIsWindows(), is(true));
}


@Test
@SystemProperty(name = "os.name", value = "MacOs")
public void aTest() {
    assertThat(systemIsWindows(), is(false));
}
2020-11-30