当前位置: 首页 > 面试题库 >

如何使用JUnit测试特定于操作系统的方法?

戴原
2023-03-14
问题内容

我想用JUnit测试以下方法:

private static boolean systemIsWindows() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.startsWith("win");
}

坦白说,我想出的唯一一件事就是基本上将相同的逻辑复制到测试中。当然,这可以防止方法被意外破坏,但是听起来有点违反直觉。

有什么更好的方法来测试此方法?


问题答案:

在单元测试中,您可以更改属性的值:

System.setProperty("os.name", "Linux")

然后,您可以测试/调用您的systemIsWindows()方法以使用断言检查其返回的内容。

为了更容易设置System属性并在测试完成时取消设置该属性(从而促进测试隔离,自我约束),可以使用以下两个JUnit附加组件:

  • JUnit4:JUnit系统规则
  • JUnit5:JUnit扩展

例如:

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


 类似资料:
  • 问题内容: 我是CMAKE的初学者。下面是一个简单的cmake文件,在mingw环境窗口中效果很好。问题显然与我链接libwsock32.a的CMAKE函数有关。在Windows中,这行得通,我得到结果。 但是,正如预期的那样,在Linux中,将查找Linux OS上没有的遗嘱。 我的问题是:如何指示CMAKE避免在Linux OS中链接wsock32库??? 任何帮助将不胜感激。 我的简单CMa

  • 问题内容: 有没有办法在npm package.json文件中指定特定于操作系统的依赖项? 例如,如果用户正在运行Linux ,我只想将’dbus’(https://npmjs.org/package/dbus)安装为模块的依赖项。对于Mac和Windows,我会有不同的依赖关系。 问题答案: 根据您的设置,有一种可能的好方法。 npm package.json支持os键, 还有可选的Depend

  • 我是故意在谈论系统测试。我们确实有一套相当详尽的单元测试,其中一些使用了模拟,而这些测试不会去任何地方。系统测试应该是对单元测试的补充,因此,模拟不是一种选择。 如果我将替换为一个test-method(让我们称之为),并引入一个顺序依赖项(使用JUnit 5非常容易),它强制在运行任何其他测试之前运行,那么这些问题就会消失。 到目前为止还好!这看起来和工作很好。当测试不是由CI服务器执行,而是由

  • 问题内容: 我正在编写几个节点外壳脚本,供在平台上开发时使用。我们有Mac和Windows开发人员。是否可以在Node中检查变量以便在一个实例中运行.sh文件,在另一个实例中运行.bat? 问题答案: 使用的变量是 在Mac上,变量返回。在Windows上,它返回(甚至在64位上)。 当前可能的值为: 我只是将其设置在我的jakeFile的顶部:

  • 使用一些钩子软件可以让人使用电脑更加方便,比如audio router(一款可以控制不同软件使用不同声卡,使用不同音量大小的软件,这个是应用程序级别的钩子软件),再比如防火墙(控制不同特征的进出流量,可以禁止某个应用链接网络,这是操作系统级别的钩子软件) 一般操作系统只是提供 具有网络系统调用 钩子的功能(就是防火墙),但是对于其他系统调用却没有提供钩子功能(比如直接监控文件的读写,可以理解为 文

  • 如何为写在服务或控制器类中的方法中的日志语句编写JUnit测试用例。