junit测试中的JPA存储库为空

时间:2018-12-11 18:43:52

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

我正在尝试为我的存储库/服务类编写一个非常基本的测试,但是由于我似乎无法弄清楚的原因,我的自动装配式存储库始终为null。

这是回购类

public interface RuleRepository extends JpaRepository<Rule, UUID> {   
    public Optional<Rule> findByName(String name);
}

和测试

@DataJpaTest
@ContextConfiguration(classes = MyApplication.class)
public class RulesTest {
    @Autowired
    private RuleRepository ruleRepository;  

    @Test
    public void testSaveOneRule() {
        if (ruleRepository == null) {
            System.err.println("HERE");
            assertTrue(true);
        } else {
              assertTrue(false);
          }
    }
}

有人有什么想法吗?测试总是通过...

编辑:我不确定这是否是一个错误,是否应该发布新帖子,但是使用注释@RunWith(SpringRunner.class)运行会产生错误RulesTest.testSaveOneRule ? IllegalState Failed to load ApplicationContext...

MyApplication.class的内容

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

3 个答案:

答案 0 :(得分:1)

我注意到您缺少此注释@RunWith(SpringRunner.class)

我正在关注此页面,因此可以https://grokonez.com/testing/datajpatest-with-spring-boot

答案 1 :(得分:1)

要测试存储库,您应该具有注释:

@DataJpaTest 
@RunWith(SpringRunner.class) 
@SpringBootTest(classes=MyApplication.class)

答案 2 :(得分:0)

如果您使用 JPA 添加类 Test @DataJpaTest。 例如:

@DataJpaTest
public class CategoriaServiceTest {
    
    @Autowired
    private CategoriaRepository repository;
    
    @Test
    public void test() {
        
        Categoria categoria = new Categoria(null, "Teste");
        
        Categoria categoriaSaved = repository.save(categoria);
        
        assertEquals(categoria.getNome(), "Jefferson");
    }

}