Я настроил Jacoco так, чтобы он генерировал отчеты о покрытии при запуске модульных тестов.
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<id>unit-test-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>surefireArgLine</propertyName>
<destFile>${jacoco.report.directory}/jacoco-ut.exec</destFile>
</configuration>
</execution>
<execution>
<id>unit-test-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${jacoco.report.directory}/jacoco-ut.exec</dataFile>
<outputDirectory>${jacoco.report.directory}/jacoco-ut</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Но по какой-то причине он пропускает пакет dao проекта, который содержит интерфейсы репозиториев Spring Data Jpa
.
Например, следующий интерфейс:
import com.shaunyl.website.dao;
public interface ProductRepository extends JpaRepository<Product, Long>, JpaSpecificationExecutor<Product> {
@Query(value = "SELECT p FROM Product p",
countQuery = "SELECT COUNT(p) FROM Product p")
Page<Product> findAll(Pageable pageable);
}
имеет следующий тест:
@RunWith(SpringRunner.class)
@DataJpaTest
public class ProductRepositoryTests {
private static final int INVENTORY_SIZE = 5;
@Autowired
ProductRepository productRepository;
private Category[] categories;
private List<Product> inventory;
@Before
public void setUp() {
inventory = productRepository.saveAll(products(INVENTORY_SIZE));
categories = inventory.stream().map(Product::getCategory).toArray(Category[]::new);
}
@Test
public void shouldRetrieveOnePageOfProducts() {
// given
int PAGE = 0;
int SIZE = 20;
Pageable pageable = newUnsortedPage(PAGE, SIZE);
// when
Page<Product> products = productRepository.findAll(pageable);
// then
assertThat(products.getNumber()).isEqualTo(PAGE);
assertThat(products.getNumberOfElements()).isEqualTo(INVENTORY_SIZE);
assertThat(products)
.as("categories are eagerly fetched")
.extracting(Product::getCategory)
.containsExactlyInAnyOrder(categories);
}
}
Но в отчете Jacoco пакет dao пропускается.Я полагаю, это потому, что целевой класс вместо этого является интерфейсом, но я не уверен.
Знаете ли вы, в чем может быть проблема, и как ее исправить?