我想用 JUnit 测试以下方法:
private static boolean systemIsWindows() {
String os = System.getProperty("os.name").toLowerCase();
return os.startsWith("win");
}
坦率地说,我唯一想到的就是基本上将相同的逻辑复制到测试中。当然,这可以防止该方法被无意中破坏,但听起来有点违反直觉。
测试此方法的更好方法是什么?
最佳答案
在单元测试中,您可以更改属性的值:
System.setProperty("os.name", "Linux")
之后,您可以测试/调用您的 systemIsWindows()
方法,以检查它使用断言返回的内容。
为了更轻松地设置系统属性并在测试完成时取消设置该属性(从而促进测试隔离、 self 包含),您可以使用以下任一 JUnit 附加组件:
- JUnit4:JUnit System Rules
- JUnit5:JUnit Extensions
例如:
@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));
}
关于java - 如何使用 JUnit 测试特定于操作系统的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58588210/