我有一个通过JNA进行本地Windows调用的类。如何编写在Windows开发机器上执行但在Unix构建服务器上被忽略的JUnit测试?
我可以使用System.getProperty("os.name")轻松地获得主机操作系统。
我可以在我的测试中编写保护块:
@Test public void testSomeWindowsAPICall() throws Exception {
if (isWindows()) {
// do tests...
}
}这种额外的锅炉板规范并不理想。
或者,我创建了一个仅在JUnit上运行测试方法的规则:
public class WindowsOnlyRule implements TestRule {
@Override
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (isWindows()) {
base.evaluate();
}
}
};
}
private boolean isWindows() {
return System.getProperty("os.name").startsWith("Windows");
}
}这可以通过将这个带注释的字段添加到我的测试类中来实现:
@Rule public WindowsOnlyRule runTestOnlyOnWindows = new WindowsOnlyRule();在我看来,这两种机制都有缺陷,因为在Unix机器上,它们会悄悄地通过。如果它们能够在执行时以类似于@Ignore的方式被标记,那会更好。
有人有其他的建议吗?
发布于 2014-05-01 15:27:23
你调查过假设吗?在前面的方法中,您可以这样做:
@Before
public void windowsOnly() {
org.junit.Assume.assumeTrue(isWindows());
}文档:http://junit.sourceforge.net/javadoc/org/junit/Assume.html
发布于 2018-03-28 05:28:21
在Junit5中,有为特定操作系统配置或运行测试的选项。
@EnabledOnOs({ LINUX, MAC })
void onLinuxOrMac() {
}
@DisabledOnOs(WINDOWS)
void notOnWindows() {
// ...
}发布于 2014-05-01 15:25:44
你看过JUnit 假设吗?
对于陈述关于测试有意义的条件的假设是有用的。失败的假设并不意味着代码被破坏,但是测试没有提供有用的信息。默认的JUnit运行程序将失败假设的测试视为被忽略。
(这似乎符合您忽略这些测试的标准)。
https://stackoverflow.com/questions/23410738
复制相似问题