使用Junit和Maven运行测试的交集

时间:2015-03-26 15:01:56

标签: maven junit maven-surefire-plugin

我使用Spring @IfProfileValue标志识别了许多测试

@IfProfileValue{"a", "c"}
@Test
public void testA{ Do Stuff }

@IfProfileValue{"a", "b"}
@Test
public void testB{ Do Stuff }

@IfProfileValue{"a", "b"}
@Test
public void testC{ Do Stuff }

@IfProfileValue{"b"}
@Test
public void testD{ Do Stuff }

我可以使用

运行所有测试
mvm clean install -Dtest-group=a -Dtest-group=b

我想只运行与@IfProfileValue = {" a"," b")匹配的测试(测试B / C) 那么有没有办法只使用maven运行这两个值的交集?

1 个答案:

答案 0 :(得分:1)

修改 您可以使用@ProfileValueSourceConfiguration@ and provide your own implementation of ProfileValueSource`对该类进行注释,如this answer中所述。

单独使用Maven看起来是不可能的。看起来它可以从具有相同名称的多个参数构建数组:

mvn test -Dtest-group=a -Dtest-group=c

将运行带@IfProfileValue(name = "test-group", values = {"c"})注释的测试。逗号符号都不会起作用,它会处理' a,c'字面意思:

    mvn test -Dtest-group=a,c
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.s17t</groupId>
<artifactId>showcase</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.1.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compier-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Java代码:

package showcase;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.annotation.IfProfileValue;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
@TestExecutionListeners
public class SimpleTest {

    @Configuration
    static class ContextConfiguration {

    }   

    @Test
    @IfProfileValue(name = "test-group", values = {"a", "b"})
    public void testPhoneLogIsReadable() {
        System.out.println("I'm a and b");
        assertTrue("Phone log is not readable.", true);
    }

    @Test
    @IfProfileValue(name = "test-group", values = {"c"})
    public void testPhoneLogHasRecords() {
        System.out.println("I'm c");
        assertFalse("Phone log does not have records.", false);
    }   

}