gpt4 book ai didi

java - 设置 Controller 中的字段以在 Spring 测试中使用

转载 作者:行者123 更新时间:2023-12-02 10:37:32 25 4
gpt4 key购买 nike

嗯,我必须实例化 Controller 才能测试它。此外,我需要在该 Controller 中设置一些不是 Spring bean 的字段。我找到了一些解决方法:

<小时/>
  • ReflectionTestUtils.setField()
  • 在 Controller 中创建构造函数并 Autowiring 它

像这样:

@Autowired
public Controller(Player player) {
this.player = player;
}

上面的方法实际上对我不起作用,因为我无法 Autowiring ,因为 Player 不是 Spring Bean。

  • 在 Controller 中创建构造函数,而不是 Autowiring 它

这样:

    public Controller() {

}

public Controller(Player player) {
this.player = player;
}

此外,我必须创建一个无参数构造函数。如果没有它,就会抛出几个异常,例如,“无法加载 ApplicationContext”

<小时/>

所以,毕竟,我决定使用最后一种方法,并且在测试中我只是以这种方式实例化 Controller :

public class ControllerTest {
private Player player = new Player();

private Controller controller = new Controller(player);
}

我基本上想知道是我所做的一切是否正确。如果还有其他方法可以在 Controller 中设置字段(不是 Spring Beans)并在测试中使用该 Controller 及其字段。

最佳答案

如果您使用 Spring Boot,您可以使用 @WebMvcTest设置有限的 Spring 上下文和 @MockBean 来创建 Controller 所需的模拟 bean,如 Testing Web Layer 中所述示例:

@RunWith(SpringRunner.class)
@WebMvcTest(Controller.class)
public class WebMockTest {

@MockBean
private Player player;

...

您应该避免使用 ReflectionTestUtils.setField(),如果该字段对于单元测试很重要,您的 Controller 应该具有该字段的构造函数或 setter 。

关于java - 设置 Controller 中的字段以在 Spring 测试中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com