Spring Boot junit测试中的JPA系统信息库为空

amrnrhlw  于 2022-11-23  发布在  Spring
关注(0)|答案(4)|浏览(133)

我试图为我的存储库/服务类编写一个非常基本的测试,但是由于我似乎无法理解的原因,我的autowired存储库总是空的。
下面是Repo类

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);
    }
}
j2cgzkjk

j2cgzkjk1#

对于测试存储库,您应该具有以下注解:

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

ilmyapht2#

如果您正在使用JPA,请在类Test@DataJpaTest.ex.中添加:

@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");
    }

}
dwthyt8l

dwthyt8l3#

我注意到您遗漏了这个注解@RunWith(SpringRunner.class)

lrl1mhuk

lrl1mhuk4#

我的解决方案(也能够加载应用程序上下文)是使用以下注解:

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class TestDiscountRepository {
...

相关问题