我创建了一个用于检测操作系统的类:
public class OperatingSystemProvider {
private final String osName;
public OperatingSystemProvider(){
this.osName = getOSName();
}
public boolean isWindowsOS(){
return osName.contains("windows");
}
public boolean isLinuxOS(){
return osName.contains("linux");
}
private String getOSName(){
return System.getProperty("os.name").toLowerCase();
}
}
然后我创建了一个类来对此进行测试:
public class OperatingSystemTests {
@Test
public void IsWindowsSystemInWidowsSystemTest(){
Assert.assertTrue(new OperatingSystemProvider().isWindowsOS());
}
@Test
public void IsLinuxSystemInWidowsSystemTest(){
Assert.assertFalse(new OperatingSystemProvider().isLinuxOS());
}
@Test
public void IsWindowsSystemInLinuxSystemTest(){
Assert.assertFalse(new OperatingSystemProvider().isWindowsOS());
}
@Test
public void IsLinuxSystemInLinuxSystemTest(){
Assert.assertTrue(new OperatingSystemProvider().isLinuxOS());
}
}
测试2在Windows中通过了测试,在Linux中通过了2测试。
我不想模拟getOSName方法,因为这可能导致错误的假设(我认为)。那么,如何在独立于系统的情况下测试该类以通过所有测试?
答案 0 :(得分:1)
测试需要在相应的OS上执行。这是确保测试正常运行的最佳方法。因此,要根据操作系统运行测试,JUnit 5具有称为EnabledOnOS
的功能@Test
@EnabledOnOs(WINDOWS)
public void IsLinuxSystemInWidowsSystemTest() {
Assertions.assertFalse(new OperatingSystemProvider().isLinuxOS());
}