【发布时间】:2015-12-28 16:26:03
【问题描述】:
我正在尝试模拟 Spring Beans。我能够模拟对象 B 和 C。但无法模拟 B 类中的对象。 插入类 A 的模拟包含 B 。但是 X 和 Y 是空的,即使我已经嘲笑了它们。 Mockito 中是否有任何方法可以模拟 Spring bean 中成员成员的对象。
@Named
@Scope(value = "prototype")
public class A {
@Inject
private B b;
@Inject
private C c;
}
@Named
@Scope(value = "prototype")
public class B {
@Inject
private X x;
@Inject
private Y y;
}
我需要在其中填充 A 类的所有依赖项的测试类。
@RunWith(MockitoJUnitRunner.class)
public class ATest {
@InjectMocks
A a = new A();
@Mock
private B b;
@Mock
private C c;
@Mock
private X x;
@Mock
private Y y;
}
【问题讨论】:
-
您正在使用 A a = new A(); 创建一个实例;你应该注射它吗?
-
即使我做@InjectMocks A a,问题仍然存在;
-
A 不依赖于 X 也不依赖于 Y。模拟它们是没有意义的。 B 和 C 是模拟,所以它们也不依赖于 X 和 Y。 X 和 Y 与 A 的检验完全无关。
-
为什么要模拟 X 和 Y。为什么需要它来测试 A,它只取决于 B 和 C?
-
这就是为什么你应该模拟 B。一个模拟 B 不使用 X 或 Y。它是一个模拟,即一个完全假的对象,除了你告诉它做的事情之外什么都不做.在发布的代码中,B 被嘲笑。您可以删除无用的 x 和 y 变量。
标签: java spring unit-testing mockito