Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test Spring Data Repository in a project without a Spring Boot Application main class

I have a small project that does not contain a class to run a Spring Boot Application. In that class I only have some configuration and some repositories. I would like to test those repositories inside the small project.

For that, I have the following:

@SpringBootTest
@DataJpaTest
public class TaskRepositoryTest extends AbstractTestNGSpringContextTests {

    @Autowired
    private TaskRepository taskRepository;

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

But I get the following error

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

Any idea what I have to do?

like image 208
Manuelarte Avatar asked May 08 '18 10:05

Manuelarte


1 Answers

This works for me with Spring Boot 2.0.3, H2 and latest 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:

In the previous version of the answer I've used @SpringBootTest @DataJpaTest but that seems to be the wrong way to do it. The following message would appear:

[main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [one.adf.springwithoutapp.TaskTest], using SpringBootContextLoader

Using @ContextConfiguration with @DataJpaTest removes that warning and IntelliJ doesn't mark the mocked taskRepository as Could not autowire. No beans of 'TaskRepository' type found.

like image 159
Andrei Damian-Fekete Avatar answered Oct 04 '22 15:10

Andrei Damian-Fekete