@DataJpaTest как указать репозитории и объекты для сканирования - PullRequest
0 голосов
/ 10 сентября 2018

По умолчанию @DataJpaTest сканирует все репозитории jpa и @Entity. В моем случае у меня есть пакет из 5 репозиториев и пакет из 5 сущностей. * Например 1003 *

com.acme.product.entity связано с com.acme.product.repository com.acme.users.entity связано с com.acme.users.repository com.acme.client.entity связано с com.acme.client.repository

И так далее ...

Я бы хотел проверить каждую часть в отдельном классе. Э.Г.

@RunWith(SpringRunner.class)
@DataJpaTest
//Some configurations to import only product repositories and product entities
public class TestProductRepository {
  @Autowired
  TestEntityManager entityManager;
}

Обратите внимание, что я настроил 5 различных EntityManager Я хотел бы импортировать их и использовать, например, productEntityManager в TestProductRepository вместо значения по умолчанию TestEntityManager, которое загружает все репозитории / объекты.

Большое спасибо

1 Ответ

0 голосов
/ 26 декабря 2018

Вот как мне удается добиться того, чего я хотел:

@ActiveProfiles( "dev" )
@RunWith( SpringRunner.class )
@DataJpaTest
// Exclude the default test database + the default EntityManager in purpose to use my configurations instead.
@AutoConfigureTestDatabase( connection = H2, replace = AutoConfigureTestDatabase.Replace.AUTO_CONFIGURED )
@Import( {
    ProductDataBaseConfig.class,//Import ProductEntityManager and other beans related to DB operations like TransactionManager, etc...
    ProductRepositoryContainer.class //Custom bean containing all product repositories
} )
public class TestProductRepository {
  @Autowired
  private TestEntityManager entityManager; 

}

Здесь важны @AutoConfigureTestDatabase(...) и @Import(...), так как я заменил автоматически сконфигурированные bean-компоненты и импортировал свои собственные ProductEntityManager, которые TestEntityManager использует предоставленную конфигурацию. Это также уменьшает область действия @DataJpaTest, которая не сканирует все сущности и репозитории в пути к классам, и это было то, что я хотел.

...