猿问

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

当我测试 Spring 启动服务时,我不知道如何注入 @Autowired bean。


我的 bean(Spring 从 application.yml 填充 @Value):


@Component

public 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?


神不在的星期二
浏览 245回答 3
3回答

青春有我

为要扫描的包添加组件扫描注解@ComponentScan(basePackages = "my.package.to.scan")

米琪卡哇伊

你的@SpringBootTest 应该是这样的:@SpringBootTest(classes = {ListenerApi.class, NavigatorProperties.class})包含您想要注入 ListenerApiTest 的每个 bean 类
随时随地看视频慕课网APP

相关分类

Java
我要回答