Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何测试util detect OS类_Java_Unit Testing_Mocking - Fatal编程技术网

Java 如何测试util detect OS类

Java 如何测试util detect OS类,java,unit-testing,mocking,Java,Unit Testing,Mocking,我创建了一个检测操作系统的类: public class OperatingSystemProvider { private final String osName; public OperatingSystemProvider(){ this.osName = getOSName(); } public boolean isWindowsOS(){ return osName.contains("windows");

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

    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中通过,2在Linux中通过


我不想模仿getOSName方法,因为这可能会导致错误的假设(我认为)。那么,我如何测试这个类,使其在独立于系统的所有测试中都通过呢?

这些测试需要在相应的操作系统上执行。这是确保测试行为完全符合要求的最佳方法。因此,为了根据操作系统运行测试,JUnit5有一个名为


如果你想测试你的代码是否正确识别它运行的操作系统,那么你没有其他方法。。。在相应的操作系统上运行它。我想您可以暂时更改系统属性,但这并不能使您取得任何进展。最后,您希望在真实场景中对其进行测试->实际运行在您想要检测的操作系统上。同时确保您可以模拟
System.getProperty
的返回,但这有什么好处?检查代码的单个“返回”行是否正在执行?我会考虑在测试中浪费的资源。此外,如果没有找到该属性,将导致NUPE在您的<代码> GETOSMANEMER()/>代码>方法中,该属性实际上不存在。可能想检查一下。谢谢你的提示,但是我的应用程序是在Linux和Windows中创建的,所以我需要检测这两个系统。如果你的应用程序预期在不同的操作系统上工作,那么你也需要在不同的操作系统中运行测试。因此,为了测试这个类,您将有两个测试需要在Windows上运行,两个测试需要在Linux上运行。现在,您至少需要两个不同的平台来运行您的测试。
@Test
@EnabledOnOs(WINDOWS)
public void IsLinuxSystemInWidowsSystemTest() {
    Assertions.assertFalse(new OperatingSystemProvider().isLinuxOS());
}