[JAVA] Testen mit com.google.testing.compile

Ich wollte eine Klasse mit einem Annotationsprozessor mit junit testen, also habe ich zuerst Aptina Unit verwendet, aber aufgrund der Umstände von Erwachsenen musste ich Kompilierungstests verwenden, also habe ich vergessen, es zu verwenden. Es ist hier so geschrieben, dass es nicht existiert.

Kompiliertest Github https://github.com/google/compile-testing

(´-`) .. oO (Ich flirte, wenn ich Englisch sehe.)

Klicken Sie hier für andere Seiten, auf die verwiesen wird http://blog.64p.org/entry/2015/03/26/055347
http://hisaichi5518.hatenablog.jp/entry/2017/09/21/213423
http://blog.duck8823.com/entry/2016/05/07/095947

(´-`) .. oO (sicheres Japanisch)

Wie benutzt man

Schreiben Sie in pom.xml:

<dependency>
  <groupId>com.google.testing.compile</groupId>
  <artifactId>compile-testing</artifactId>
  <version>0.12</version>
  <scope>test</scope>
</dependency>

(´-`) .. oO (Ich möchte hier aufhören.)

Testcode

Dies ist ein Beispieltestcode, der geschrieben wurde, um die vom Prozessor ausgegebene Quelle zu überprüfen.



import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import javax.tools.JavaFileObject;

import org.junit.Test;

import com.google.common.io.Resources;
import com.google.testing.compile.Compilation;
import com.google.testing.compile.JavaFileObjects;

import static com.google.testing.compile.Compiler.javac;
import static com.google.common.truth.Truth.assert_;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;

public class MyProcessorTest {
	@Test
	public void test_Überprüfen Sie die Ausgabe des Prozessors(){
		MyProcessor processor = new MyProcessor();
		
		// assert
		assert_().about(javaSource())
			.that(JavaFileObjects.forResource(Resources.getResource("HelloWorld.java")))
			.processedWith(processor)
			.compilesWithoutError()
			.and()
			.generatesSources(JavaFileObjects.forSourceString("foo.bar.baz.Blah", "package foo.bar.baz;\n"
					+ "\n"
					+ "import java.lang.String;\n"
					+ "import javax.annotation.Generated;\n"
					+ "\n"
					+ "@Generated({\"me.geso.sample.hello.MyProcessor\"})\n"
					+ "public class Blah {\n"
					+ "  public String hello() {\n"
					+ "    return \"hello\";\n"
					+ "  }\n"
					+ "}"));


	}
}

Sie können sehen, dass foo.bar.baz.Blah die folgenden Parameter mit generatesSources () übereinstimmt.

Testen Sie, wann Sie nach Fehlern suchen möchten

	@Test
	public void test_process_Error() throws Exception {
		File stub = new File(System.getProperty("user.dir") + "/src/test/java/jp/co/processor/MyProErrStub.java");
		
        assert_().about(JavaSourceSubjectFactory.javaSource())
        	.that(JavaFileObjects.forResource(stub.toURI().toURL()))
        	.processedWith(new MyProcessor())
        	.failsToCompile();
	}

Recommended Posts

Testen mit com.google.testing.compile
Optimieren Sie Java-Tests mit Spock
REST-API-Test mit REST Assured
Automatischer API-Test mit Selen + REST-Assured
Starten Sie die UI-Tests mit Dagger2 und Mockito
Einführung in den Parametrisierungstest in JUnit
Automatisieren Sie Integrationstests mit dem Maven Failsafe-Plug-In
Ist das Testen von Einheiten mit der Konstruktorinjektion nicht einfacher? Sich unterhalten
Tipps zum Testen mit Mock für Klassen mit @value