Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构

30.5. Junit4

30.5.1. 生成 HTML 报告

			
<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>demo</groupId>
	<artifactId>junit4</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>junit4</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.22.1</version>
				<configuration>
					<useSystemClassLoader>false</useSystemClassLoader>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<reporting>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-report-plugin</artifactId>
				<version>2.22.1</version>
			</plugin>
		</plugins>
	</reporting>
</project>

			
			

生成报告

			
neo@MacBook-Pro ~/workspace/junit4 % mvn surefire-report:report-only
			
			

30.5.2. Junit4 输出格式定义

		
package cn.netkiller.api.test;

import java.util.ArrayList;
import java.util.List;

import org.junit.experimental.categories.Category;
import org.junit.runner.Description;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;

public class ApiTestRunner extends BlockJUnit4ClassRunner {

	public ApiTestRunner(Class<?> class) throws InitializationError {
		super(class);
	}

	@Override
	protected Description describeChild(FrameworkMethod method) {
		Api api = method.getAnnotation(Api.class);
		if (api == null) {
			return super.describeChild(method);
		}

		List<String> list = new ArrayList<String>();
		Class<?>[] categorys;

		if (method.getAnnotation(Category.class) != null) {
			categorys = method.getAnnotation(Category.class).value();
		} else {
			categorys = this.getTestClass().getJavaClass().getAnnotation(Category.class).value();
		}

		for (Class<?> category : categorys) {
			if (category.getSimpleName().equals("EnterpriseCategory")) {
				list.add("Enterprise");
			} else if (category.getSimpleName().equals("ProfessionalCategory")) {
				list.add("Professional");
			}
		}

		String tag = "";
		if (list != null) {
			tag = String.join(",", list);
		}
		String name = String.format("%s - %s %s - %s", method.getName(), api.method(), api.uri(), tag);
		return Description.createTestDescription(getTestClass().getJavaClass(), name, method.getAnnotations());
	}
}
		
			
		
package cn.netkiller.api.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD })
public @interface Api {
    public ApiMethod method() default ApiMethod.GET;

    public String uri() default "/";
}
		
			

		
public interface ProfessionalCategory {
    String name = "Professional";
}

public interface EnterpriseCategory {
    String name = "Enterprise";
}