DATAES-994 Add setup for mutation testing.

Original PR: #568
This commit is contained in:
Peter-Josef Meisch 2020-12-06 12:08:42 +01:00 committed by GitHub
parent e408067b49
commit fcb8a9b0ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 112 additions and 0 deletions

41
TESTING.adoc Normal file
View File

@ -0,0 +1,41 @@
= Testing
== Unit tests
Unit tests in the project are run with
----
./mvnw test
----
== Integration tests
Integration tests are executed when
----
./mvnw verify
----
is run. There must be _docker_ running, as the integration tests use docker to start an Elasticsearch server.
Integration tests are tests that have the Junit5 Tag `@Tag("integration-test")` on the test class. Normally this should not be set explicitly, but the annotation `@SpringIntegrationTest` should be used. This not only marks the test as integration test, but integrates an automatic setup of an Elasticsearch Testcontainer and integrate this with Spring, so
that the required Beans can be automatically injected. Check _src/test/java/org/springframework/data/elasticsearch/JUnit5SampleRestClientBasedTests.java_ as a reference setup
== Mutation testing
The pom includes a plugin dependency to run mutation tests using [pitest](https://pitest.org/). These tests must be explicitly configured and run, they are not included in the normal build steps. Before pitest can run, a normal `./mvnw test` must be executed. The configuration excludes integration tests, only unit tests are considered.
pitest can be run directly from the commandline
----
./mvnw org.pitest:pitest-maven:mutationCoverage
----
This will output an html report to _target/pit-reports/YYYYMMDDHHMI_.
To speed-up repeated analysis of the same codebase set the withHistory parameter to true.
----
./mvnw -DwithHistory org.pitest:pitest-maven:mutationCoverage
----
The classes to test are defined either in the pom.xml or can be set on the commandline:
----
./mvnw -DwithHistory org.pitest:pitest-maven:mutationCoverage -DtargetClasses="org.springframework.data.elasticsearch.support.*"
----

20
pom.xml
View File

@ -366,6 +366,26 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.5.2</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.12</version>
</dependency>
</dependencies>
<configuration>
<excludedGroups>integration-test</excludedGroups>
<targetClasses>
<param>org.springframework.data.elasticsearch.core.geo.*</param>
</targetClasses>
<excludedMethods>toString</excludedMethods>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>

View File

@ -0,0 +1,51 @@
package org.springframework.data.elasticsearch.core.geo;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.data.geo.Point;
/**
* @author P.J. Meisch (pj.meisch@sothawo.com)
*/
class GeoPointUnitTests {
@Test
@DisplayName("should create From a Point")
void shouldCreateFromAPoint() {
Point point = new Point(8, 48);
GeoPoint geoPoint = GeoPoint.fromPoint(point);
assertThat(geoPoint).isEqualTo(new GeoPoint(48, 8));
}
@Test
@DisplayName("should convert to a Point")
void shouldConvertToAPoint() {
GeoPoint geoPoint = new GeoPoint(48, 8);
Point point = GeoPoint.toPoint(geoPoint);
assertThat(point).isEqualTo(new Point(8, 48));
}
@Test
@DisplayName("should not be equal to a Point")
void shouldNotBeEqualToAPoint() {
//noinspection AssertBetweenInconvertibleTypes
assertThat(new GeoPoint(48, 8)).isNotEqualTo(new Point(8, 48));
}
@Test
@DisplayName("should compare lat and lon values")
void shouldCompareLatAndLonValues() {
GeoPoint geoPoint = new GeoPoint(48, 8);
assertThat(geoPoint).isEqualTo(new GeoPoint(48, 8));
}
}