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