如何在 JUnit 5 测试中“自动装配”存储库

问题描述 投票:0回答:1

我不明白你在 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) {
        [...]
    }
}

这是我在每堂考试课上都应该做的事情吗?

spring junit5 spring-test
1个回答
0
投票

首先,你必须使用

@ExtendWith(SpringExtension.class)
将Spring测试框架与Junit5集成。

其次,你必须使用

@ContextConfiguration
来告诉spring有哪些配置类用于引导spring上下文。

不能保证它会解决你所有的问题,但是结合这两个应该使你的测试至少可以引导 spring 上下文并自动装配到测试类中:

MessageRepository

© www.soinside.com 2019 - 2024. All rights reserved.