我不明白你在 JUnit 5 测试中引用我的服务/存储库。我试图对它进行注释,就像我对运行良好的主类进行注释一样:
@ComponentScan
@EnableJpaRepositories
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class TestMessageRepository {
@Autowired
private MessageRepository messageRepository;
@Test
@Order(1)
void testFindAllEmpty() {
assertFalse(messageRepository.findAll().iterator().hasNext());
}
}
但是当我运行测试类时它不起作用,我收到错误
Cannot invoke "com.cypherf.repository.MessageRepository.findAll()" because "this.messageRepository" is null
。那你该怎么做呢?
在我的主类中,我有一个静态 main 方法,它实例化一个 ApplicationContext,然后使用它来创建一个 bean 并运行它:
@ComponentScan
@EnableJpaRepositories
public class TestSpringApplication {
@Autowired
private MessageRepository messageRepository;
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(TestSpringApplication.class);
TestSpringApplication app = ctx.getBean(TestSpringApplication.class);
app.run(args);
}
public void run(String... args) {
[...]
}
}
这是我在每堂考试课上都应该做的事情吗?
@ExtendWith(SpringExtension.class)
将Spring测试框架与Junit5集成。
@ContextConfiguration
来告诉spring有哪些配置类用于引导spring上下文。
不能保证它会解决你所有的问题,但是结合这两个应该使你的测试至少可以引导 spring 上下文并自动装配到测试类中:
MessageRepository