An easy way to verify that your annotation processor is emitting the right diagnostics.
In order to use any of the test runners, you must include your test sources as a resource:
<build>
...
<testResources>
<testResource>
<directory>src/test/java/</directory>
</testResource>
<testResource>
<directory>src/test/resources/</directory>
</testResource>
</testResources>
...
</build>
Additionally, you may need to disable annotation processing during test
compilation if you are testing ERROR
diagnostics.
<build>
...
<plugins>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-testCompile</id>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<proc>none</proc>
</configuration>
</execution>
</executions>
</plugins
...
</build>
Annotate your test class with @UseProcessor
, @ExpectError
, and
@ExpectDiagnostic
:
@UseProcessor(YourProcessor.class)
public class YourProcessorTest {
@ExpectError @IncorrectlyUsedAnnotation
public void method() {}
@ExpectError("substring of the message") @IncorrectlyUsedAnnotation
public void method1() {}
@ExpectError(lineOffset = 1) // Expect a diagnostic on the next line.
@IncorrectlyUsedAnnotation
public void method2() {}
@ExpectError(value = "[abc]+", regex = true) @IncorrectlyUsedAnnotation
public void method3() {}
@ExpectError(testName = "descriptive JUnit test name") @IncorrectlyUsedAnnotation
public void method4() {}
// No @Expect annotation needed.
@CorrectlyUsedAnnotation
public void method5() {}
}
Add @RunWith(DiagnosticTester.class)
to your test class.
Ensure that annotation-processor-testing-junit5
is included as a dependency,
and the JUnit 5 launcher should automatically discover your tests.