此代码是否可测试



假设我有一个构造函数:

public Something(A a) {
    this.a = a;
    this.b = a.someLogicMethod();
    this.c = b.someLogicMethod();
}
@Autowired
private Class d;

此代码可测试吗?如果没有,我应该更改什么以使其可测试,并通过对象 a 的方法保持 b 的初始化,我将其作为类构造函数的参数获得。

我想将类 B 的对象(我在测试类中创建的对象

(传递给 Something 类,问题是应该嘲笑某物并且对象 a 被嘲笑,所以我不能用 when&thenReturn 更改 a 的行为,所以当调用 a.someLogicMethod 时,它将返回我在测试类中创建的类 B 的对象, 因为当某物被模拟时,when&thenReturn 逻辑将在 a.someLogicMethod(( 被调用并且 b 被设置后被调用。我也不能为 b 对象设置一个 setter,因为它应该使用 a.someLogicMethod(( 初始化。我需要嘲笑某物的原因是因为我希望对象 d 会被嘲笑。

谢谢。

您正在将A注入Something所以只需模拟A,然后在调用someLogicMethod()A返回模拟B

例如:

A mockA = Mockito.mock(A.class);
B mockB = Mockito.mock(B.class);
Mockito.when(a.someLogicMethod()).thenReturn(mockB);
Something something = new Something(mockA);

然后,您可以在测试用例中调用something,因此您可以通过使用when/then或when/throw或doThrow/when等来设置对mockB的期望来控制something的行为。

这里有两个方面:

  • 您的构造函数是测试友好的,因为您将A实例传递给它。因此,正如另一个答案所概述的那样,您应该能够将模拟实例传递给该构造函数 - 从而可以完全控制以下方法调用发生的情况。

  • 关于@autowired:这里的答案是转向使用特殊的弹簧 JUnit 跑步者(有关所有荣耀详细信息,请参阅此处(

相关内容

  • 没有找到相关文章

最新更新