Je pense que personne ne ferait cela, mais j'ai tellement souffert que je vais en prendre note.
: grin: 1.4: Comment faire dans le cas de 1.4. : smirk: 1.2: 1.2 est comment faire.
@EntityScan
:grin: 1.4: org.springframework.boot.autoconfigure.domain.EntityScan :smirk: 1.2: org.springframework.boot.orm.jpa.EntityScan
DI
: grin: 1.4: Si cela va de soi, DI se fera sans ajouter @ Autowired
.
: sourire narquois: 1.2: Ajoutons @ Autowired
.
:grin: 1.4: @RunWith(SpringRunner.class)
:smirk: 1.2: @RunWith(SpringJUnit4ClassRunner.class)
: grin: 1.4: Ajouter @ SpringBootTest
: sourire narquois: 1.2: Ajouter @SpringApplicationConfiguration (classes = classes d'application)
http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/SpringApplicationConfiguration.html
: grin: 1.4: Ajoutez @ DataJpaTest
à la classe de test.
: sourire narquois: 1.2: C'est dur.
@ DataJpaTest
semble faire cela.
@ EntityScan
Je pensais que je devais tout faire, mais il semble que ce n'est pas grave si je fais tout cela.
@ EntityScan
et @ EnableJpaRepositories
.TestEntityManager
(à partir de 1.4)TestEntityManager
(à partir de 1.4)@ Transactional
et @ SpringApplicationConfiguration
à la classe de test.Je vais le faire dans l'ordre.
@ EntityScan
, @ EnableJpaRepositories
TestApplication.java
@SpringBootApplication
@EnableJpaRepositories(Emplacement de la classe de référentiel)
@EntityScan(Emplacement de la classe d'entité)
@EnableJpaAuditing //Ce n'est pas pertinent cette fois
public class TestApplication {
}
TestEntityManager
(à partir de 1.4)La source originale est ici. https://github.com/spring-projects/spring-boot/blob/master/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/
TestEntityManager.java
public class TestEntityManager {
private final EntityManagerFactory entityManagerFactory;
public TestEntityManager(EntityManagerFactory entityManagerFactory) {
Assert.notNull(entityManagerFactory, "EntityManagerFactory must not be null");
this.entityManagerFactory = entityManagerFactory;
}
public <E> E persist(E entity) {
getEntityManager().persist(entity);
return entity;
}
public void flush() {
getEntityManager().flush();
}
public <E> E persistAndFlush(E entity) {
persist(entity);
flush();
return entity;
}
public void detach(Object entity) {
getEntityManager().detach(entity);
}
public <E> E find(Class<E> entityClass, Object primaryKey) {
return getEntityManager().find(entityClass, primaryKey);
}
public final EntityManager getEntityManager() {
EntityManager manager = EntityManagerFactoryUtils
.getTransactionalEntityManager(this.entityManagerFactory);
Assert.state(manager != null, "No transactional EntityManager found");
return manager;
}
}
TestEntityManager
(à partir de 1.4)TestEntityManagerConfigure.java
@Configuration
@AutoConfigureAfter(HibernateJpaAutoConfiguration.class)
public class TestEntityManagerConfigure {
@Bean
@ConditionalOnMissingBean
public TestEntityManager testEntityManager(
EntityManagerFactory entityManagerFactory) {
return new TestEntityManager(entityManagerFactory);
}
}
@ Transactional
et @ SpringApplicationConfiguration
à la classe de testMySomeRepositoryTest.java
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class)
@Transactional
public class MySomeRepositoryTest {
@Autowired
private MySomeRepository instance;
@Autowired
private TestEntityManager em;
@Test
public void testSomeMethod {
// ...
}
}
: grin: 1.4: Ajoutez @ MockBean
à la variable d'instance que vous voulez simuler
: smirk: 1.2: Définissez @ Bean
qui renvoie une instance simulée et ajoutez @ Primary
MySomeTest.java
@MockBean
private MyTargetClass mock;
@Profile est ajouté afin que seule une classe @Configuration spécifique soit valide.
MySomeTest.java
@ActiveProfiles("MySomeTest")
public class MySomeTest {
@Autowired
private MyTargetClass mock;
}
MySomeTestConfig.java
@Configuration
@Profile("MySomeTest")
public class MySomeTestConfig {
@Bean
@Primary
public MyTargetClass myTargetClass() {
return Mockito.mock(MyTargetClass.class);
}
}
Si vous trouvez quelque chose, je l'ajouterai.
Recommended Posts