我正在测试Spring Boot功能作为该领域的新手。我有一个基本依赖的简单应用程序。
然后有一个带有@SpringBootApplication
注释的简单Application类。
然后我有一个带@Service
注释的简单DummyService。
然后,我创建了一个简单的测试DummyServiceTest,其中包含一个@Test
方法以及@RunWith(SpringRunner.class)
和@SpringBootTest
注释。
@SpringBootTest
是关键问题。使用spring-boot-starter-data-jpa依赖项,此注释测试甚至需要@DataJpaTest
注释。没有它,即使测试不需要使用数据,框架也不会解决HibernateJpaAutoConfiguration
或DataSource
或其他注入依赖关系。
我可以以某种方式抑制它吗?我不是任何一种Spring大师所以我的猜测是有一些简单的配置来处理这个问题。
P.S。好的,回到树上。即使使用@DataJpaTest
,测试也无法解决数据依赖性问题。我尝试添加@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
,但它也无法正常工作。我尝试使用相同的结果添加@Transactional
。它有点荒谬了。
答案 0 :(得分:0)
如果您还没有使用JPA,那么注释掉/删除build.gradle中的依赖项,直到您使用JPA。在Hibernate和/或JPA配置成功完成之前,您需要定义数据源和其他配置详细信息。在@SpringApplicationConfiguration代码运行时,每个应用程序依赖项都会得到解决,即使您当前的#hello world"测试不需要JPA数据。
我当前的单元测试实际上已将@SpringBootTest注释掉了。以下是我在应用程序的JPA相关测试中如何设置和工作的简化视图:
@RunWith(SpringJUnit4ClassRunner)
@SpringApplicationConfiguration(classes = DaemonApplication)
@ActiveProfiles('local')
//@SpringBootTest
@Transactional
public abstract class AbstractJpaTest extends AbstractTransactionalJUnit4SpringContextTests {
@BeforeTransaction
public void setupData() throws Exception {
deleteFromTables('User', 'User_Session', 'User_Handshake');
}
}
然后
class UserHandshakeRepositoryIntegrationTest extends AbstractJpaTest {
@Autowired UserHandshakeRepoImpl handshakeRepository;
@Test
public void testSave() {
UserHandshake handshake = handshakeRepository.save(new UserHandshake());
assertThat(handshake.getId(), is(notNullValue()));
}