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

时间:2018-04-17 07:23:39

标签: java unit-testing junit

我想用JUnit测试以下方法:

private static boolean systemIsWindows() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.startsWith("win");
}
坦率地说,我唯一想到的就是基本上将相同的逻辑复制到测试中。当然,这可以防止方法被无意中破坏,但听起来有些违反直觉。

测试此方法的更好方法是什么?

2 个答案:

答案 0 :(得分:4)

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

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));
}

答案 1 :(得分:0)

JUnit 5中更好的方法是使用@EnabledOnOs https://junit.org/junit5/docs/5.2.0/api/org/junit/jupiter/api/condition/EnabledOnOs.html

例如:

@Test
@EnabledOnOs({OS.WINDOWS})
public void aTest() {
    assertThat(systemIsWindows(), is(false));
}