当前位置: 首页 > 知识库问答 >
问题:

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

卜凯旋
2023-03-14

当我测试我的Spring boot服务时,我不知道如何注入一个@Autowired bean。

My bean(Spring填充@Value fromapplication.yml):

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

谢谢。

共有3个答案

丌官哲彦
2023-03-14

您的@SpringBootTest应该是这样的:< br >

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

包含要注入ListenerApiTest的每个bean

姬正文
2023-03-14

在要扫描的包中添加组件扫描注释

@ComponentScan(basePackages = "my.package.to.scan")
尹昂雄
2023-03-14

首先,你需要用< code > org . spring framework . stereotype . component 来注释你的依赖关系。

@Component
public class ListenerApi implements IRestListenerApi {

然后在需要时注入:

@Autowired
private ListenerApi listenerApi;
 类似资料:
  • 我对单元测试有问题。下面是示例代码片段。我模拟了一个bean,并将其注入@configuration类,然后使用mocked属性创建另一个bean。 在下面的示例中,如果我检查,b.getSomething()会返回默认值,如字符串为“”,int为0等。我不会得到模拟值。你知道怎么做吗?

  • 我这里有一个问题,请给出一些想法。 我有两个豆子。FaceComparisonServerImpl依赖于FaceServer。当我想测试的时候。我想更改我的'FaceServer'bean中的字符串。 贝娄是我的测试代码。 我的问题是:我如何修改@bean(faceServer)中'version'和'server_url'的值? 谢谢你!

  • 我正在使用以下依赖项: 创建了新的测试类: 我在Spring Boot中创建了测试用例,但是我得到了这个错误: 这是我的应用程序类: 知道我为什么不能在测试类中注入bean吗? 我按照建议删除了@ContextConfiguration,@ComponentScan,@ConnecationTes现在我看到了不同的异常:

  • 问题内容: 我有一个组件安装程序,它实际上是一个应用程序的启动器。它的配置如下: MyService带有Spring注释,并自动连接到我的启动器类中,没有任何问题。 我想为MyLauncher编写一些jUnit测试用例,为此,我启动了一个这样的类: 我可以为MyService创建一个Mock对象,然后将其注入测试类中的myLauncher吗?由于Spring正在处理自动装配,因此我目前在myLau

  • 概要文件对于我所需要的似乎有点过分了,我不确定这是否可以通过主注释来实现,因为不同的单元测试可能有不同的模拟。

  • 问题内容: 我试图通过注释将整个JSF托管Bean注入另一个托管Bean非常相似,但是我正在注入Bean,而不是Servlet)。这就是我在做什么: 不起作用(JSF 2.0 / Mojarra 2.0.3): 有没有可能或者我需要通过编程方式进行注射? 问题答案: 您需要添加setter和getter 当将解析并注入依赖项时,它将使用setters注入,因此适当的setters / getter