[JAVA] Test avec com.google.testing.compile

Je voulais tester une classe en utilisant un processeur d'annotation utilisant junit, j'ai donc utilisé Aptina Unit au début, mais en raison de circonstances adultes, j'ai dû utiliser des tests de compilation, j'ai donc oublié de l'utiliser. Il est écrit ici pour qu'il n'existe pas.

test de compilation github https://github.com/google/compile-testing

(´-`) .. oO (Je flirte quand je vois l'anglais.)

Cliquez ici pour d'autres pages référencées 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 (japonais sûr)

Comment utiliser

Dans pom.xml, écrivez:

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

(´-`) .. oO (Je veux m'arrêter ici.)

Code de test

Il s'agit d'un exemple de code de test écrit pour vérifier la sortie source par le processeur.



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_Vérifiez la sortie du processeur(){
		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"
					+ "}"));


	}
}

Vous pouvez voir que foo.bar.baz.Blah correspond aux paramètres suivants avec generateSources ().

Testez lorsque vous souhaitez rechercher des erreurs

	@Test
	public void test_process_Erreur() 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

Test avec com.google.testing.compile
Rationalisez les tests Java avec Spock
Test de l'API REST avec REST Assured
Test API automatique avec Selenium + REST-Assured
Démarrez les tests d'interface utilisateur avec Dagger2 et Mockito
Introduction au test de paramétrage dans JUnit
Automatisez les tests d'intégration avec le plug-in Maven Failsafe
Les tests unitaires ne sont-ils pas plus faciles avec l'injection de constructeur? Parler
Conseils pour tester avec mock pour les classes utilisant @value