相关疑难解决方法(0)

如何在JUnit 4中运行属于某个类别的所有测试

JUnit 4.8包含一个名为"Categories"的新功能,允许您将某些类型的测试组合在一起.这非常有用,例如,为慢速和快速测试分别进行测试.我知道JUnit 4.8发行说明中提到的内容,但是想知道我如何实际运行所有使用某些类别注释的测试.

JUnit 4.8发行说明显示了一个示例套件定义,其中SuiteClasses注释选择要运行的特定类别的测试,如下所示:

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
  // Will run A.b and B.c, but not A.a
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在SlowTests类别中运行所有测试?您似乎必须拥有SuiteClasses注释...

java junit unit-testing junit4

71
推荐指数
3
解决办法
3万
查看次数

如何在Maven中按类别运行JUnit测试?

使用JUnit 4.8和新@Category注释,有没有办法选择与Maven的Surefire插件一起运行的类别子集?

例如,我有:

@Test
public void a() {
}

@Category(SlowTests.class)
@Test
public void b() {
}
Run Code Online (Sandbox Code Playgroud)

我想按照以下方式运行所有非慢速测试:(注意-Dtest.categories由我组成......).

mvn test -Dtest.categories=!SlowTests // run non-slow tests
mvn test -Dtest.categories=SlowTests // run only slow tests
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests
mvn test // run all tests, including non-categorized
Run Code Online (Sandbox Code Playgroud)

所以重点是我不想创建测试套件(Maven只是在项目中选择了非常方便的所有单元测试)并且我希望Maven能够按类别选择测试.我想我刚编了-Dtest.categories,所以我想知道是否有类似的设施我可以使用?

java junit categories maven maven-surefire-plugin

70
推荐指数
6
解决办法
5万
查看次数

我应该在哪里为Junit @Category设置接口类?

我想定义项目范围的接口,用于@Category注释,并配置Maven在构建整个项目时排除它们的注释测试.

应用程序项目中,有一个我要分类的测试:

@Category(Integration.class)
@Test
public void testExternalResource() { ... }
Run Code Online (Sandbox Code Playgroud)

那个设定:

我已经建立了一个多模块maven项目:

/container (has a pom with <modules> element)
    /parent (all other modules inherit from its pom. has no source, only pom)
    /util (other modules are depending on it)
    /infra
    /application (depending on infra and util, inherits from parent)
Run Code Online (Sandbox Code Playgroud)

作为一个基础设施狂热者:),我想配置我的整个项目以排除任何模块中的组.所以,在模块中我定义了:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
         <excludedGroups>com.mycompany.test.Integration</excludedGroups>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我将Integration接口放在util模块中(在util/src/test/java)中,所有模块都可以看到:

package com.mycompany.test;
public interface Integration {}
Run Code Online (Sandbox Code Playgroud)

因为它是一个test-jar, …

junit integration-testing maven maven-surefire-plugin

8
推荐指数
1
解决办法
3341
查看次数

有没有办法强制Maven Surefire或JUnit在从Test Suite执行时指出失败的测试类的名称?

我的问题:当从Test Suite执行此类时,是否有办法强制Maven Surefire(或JUnit?)指示失败的测试类的名称?

现在,漫长的故事.

想象一下,你有一个JUnit测试套件,可以启动两个JUnit测试.

测试类的示例:

public class TestOne {

    @Test
    public void foo() {
        assertTrue(false);
    }

    @Test
    public void bar() {
        assertTrue(false);
    }

}

@UnitTest
public class TestTwo {

    @Test
    public void foo() {
        assertFalse(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

和测试套件:

@RunWith(Suite.class)
@SuiteClasses(value = { TestOne.class, TestTwo.class })
public class MySuite {

}
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行测试套件(mvn test -Dtest=MySuite),我将有以下错误:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running caf.opm.preclosing.junit.MySuite
Tests run: 3, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec …
Run Code Online (Sandbox Code Playgroud)

java junit test-suite surefire maven

5
推荐指数
1
解决办法
1763
查看次数