在没有Spring Boot Application主类的项目中测试Spring Data Repository

时间:2018-05-08 10:15:33

标签: spring-boot spring-data-jpa testng

我有一个小项目,它不包含运行Spring Boot应用程序的类。在那个类中,我只有一些配置和一些存储库。我想在小项目中测试这些存储库。

为此,我有以下内容:

@SpringBootTest
@DataJpaTest
public class TaskRepositoryTest extends AbstractTestNGSpringContextTests {

    @Autowired
    private TaskRepository taskRepository;

    @Test
    public void test() {
        taskRepository.save(new Task("open"));
    }
}

但是我收到以下错误

Caused by: java.lang.NoSuchMethodError: org.springframework.boot.jdbc.DataSourceBuilder.findType(Ljava/lang/ClassLoader;)Ljava/lang/Class;

知道我必须做什么吗?

1 个答案:

答案 0 :(得分:3)

这适用于Spring Boot 2.0.3,H2和最新的RELEASE testng:

@EnableAutoConfiguration
@ContextConfiguration(classes = TaskRepository.class)
@DataJpaTest
public class TaskTest extends AbstractTestNGSpringContextTests {

   @Autowired
   private TaskRepository taskRepository;

   @Test
   public void test() {
      taskRepository.save(new Task("open"));
   }

}

LE:

在先前版本的答案中,我使用过@SpringBootTest @DataJpaTest,但这似乎是错误的方法。 将显示以下消息:

  

[main]信息org.springframework.boot.test.context.SpringBootTestContextBootstrapper-使用SpringBootContextLoader找不到测试类[one.adf.springwithoutapp.TaskTest]的@ContextConfiguration和@ContextHierarchy

@ContextConfiguration@DataJpaTest一起使用会删除该警告,并且IntelliJ不会将模拟的taskRepository标记为无法自动装配。找不到“ TaskRepository”类型的bean。