如何测试工具检测操作系统类

时间:2018-06-20 13:10:23

标签: java unit-testing mocking

我创建了一个用于检测操作系统的类:

    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方法,因为这可能导致错误的假设(我认为)。那么,如何在独立于系统的情况下测试该类以通过所有测试?

1 个答案:

答案 0 :(得分:1)

测试需要在相应的OS上执行。这是确保测试正常运行的最佳方法。因此,要根据操作系统运行测试,JUnit 5具有称为EnabledOnOS

的功能
@Test
@EnabledOnOs(WINDOWS)
public void IsLinuxSystemInWidowsSystemTest() {
    Assertions.assertFalse(new OperatingSystemProvider().isLinuxOS());
}