为了账号安全,请及时绑定邮箱和手机立即绑定

在 Spring 启动测试中,如何创建一个 bean 并通过 @Autowired 注入?

在 Spring 启动测试中,如何创建一个 bean 并通过 @Autowired 注入?

神不在的星期二 2021-06-17 18:50:37
当我测试 Spring 启动服务时,我不知道如何注入 @Autowired bean。我的 bean(Spring 从 application.yml 填充 @Value):@Componentpublic class NavigatorProperties {    @Value("${timerDelay}")    private String timerDelay;    public String getTimerDelay() {        return timerDelay;    }    public void setTimerDelay(String timerDelay) {        this.timerDelay = timerDelay;    }}我的api:public class ListenerApi implements IRestListenerApi {    @Autowired    private NavigatorProperties np;    public String doSomething (...) { // This is my service method.        // Here np.getTimerDelay() will return application.yml value.        int timerDelay = Integer.decode(np.getTimerDelay());        ...    }}这工作正常并且 int 值是正确的。这是我的测试:@RunWith(SpringRunner.class)@SpringBootTest(classes = {ListenerApiTest.class, NavigatorProperties.class})@FixMethodOrder(MethodSorters.NAME_ASCENDING)public class ListenerApiTest {    @Autowired    private NavigatorProperties np; // Can be autowired or a new Object.    // Object to test.    private ListenerApi listenerApi;    @Test    public void test01ForceNumberFormatException() {        np.setTimerDelay("NumberFormatException");        // Inyect into ListenerApi    }    @Test    public void test02ForceNullPointerException() {        np.setTimerDelay(null);        // Inyect into ListenerApi    }在此测试评论中,我如何通过 @Autowired 输入 ListenerApi?
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

为要扫描的包添加组件扫描注解

@ComponentScan(basePackages = "my.package.to.scan")


查看完整回答
反对 回复 2021-06-30
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

你的@SpringBootTest 应该是这样的:

@SpringBootTest(classes = {ListenerApi.class, NavigatorProperties.class})

包含您想要注入 ListenerApiTest 的每个 bean 类


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 244 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信