gpt4 book ai didi

java - 将模拟bean注入(inject)到测试对象中

转载 作者:行者123 更新时间:2023-12-01 21:52:15 28 4
gpt4 key购买 nike

如何将具有某些行为定义的模拟 bean 注入(inject)到正在测试的类中,但当它启动时,构造函数调用会模拟并对其执行某些操作。

例如,我想测试这个类:

public class A {

@Autowired
private B b;

private String result = null;

public A(int c) {
result = b.calculateStuff(c) + "AA";
}

public String getResult() {
return result + "A";
}
}

Now the test class:


public class ATest{

@Mock
private B b;

@InjectMocks
private A a;

@Before
public void setUp() {
doReturn("String result!").when(B).get(anyInt());
MockitoAnnotations.initMocks(this);
}

public void testGetResult() {
assertEquals(a.getResult(),"String result!AAA");
}
}

我怎样才能真正将模拟注入(inject)到 A 中?有没有更好的方法来解决这个问题?

最佳答案

根据 documentation 被测对象的构造函数必须与测试中的模拟相匹配才能发生注入(inject)。 因此,您需要重新设计构造函数才能使其正常工作。 int 无法被模拟。

作为一般说明,您应该尝试保持 Spring beans 无状态,这意味着唯一允许的类变量是其他无状态 bean (所以没有 Stringint 和其他文字)。例如:

public class A {

@Autowired
private B b;

public String getResult(int c) {
return b.calculateStuff(c) + "AAA";
}
}

MockitoAnnotations.initMocks(this); 应该是 @Before 带注释的方法中的第一次调用。

此外,您的预期实际参数的方式是错误的。

关于java - 将模拟bean注入(inject)到测试对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999502/

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