【发布时间】:2017-05-24 18:40:10
【问题描述】:
我一直在学习有关 Java 中的 Mockito 框架的更多信息,但我不知道该怎么做才能完成这个单元测试。
基本上,来自控制台的错误表明当 Bar.sayHi() 方法试图从 Foo 测试运行时出现 NullPointerException。我怀疑它与自动装配字段有关(但我可能错了)?
下面是我遇到的问题的一个简单示例:
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock
//@Spy // Cannot spy on an interface
IBar bar;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
// Given
FooImpl foo = new FooImpl();
foo.saySaySay();
// When
// Then
}
}
这是正在测试的 FooImpl 类(Foo 有一个接口):
public class FooImpl implements IFoo {
@Autowired
private IBar bar;
public void saySaySay() {
bar.sayHi();
}
}
还有 Bar 类(还有一个 Bar 的接口):
public class BarImpl implements IBar {
@Override
public void sayHi() {
System.out.println("hello");
}
}
有人对此有什么建议吗?谢谢。
【问题讨论】:
-
dzone.com/articles/use-mockito-mock-autowired 据此,您可能需要在
FooImpl实例上使用@InjectMocks以允许Mockito 自动创建它(并为您注入依赖项)而不是手动创建。你试过了吗? -
我现在试试这个,但我使用的是 Mockito Cookbook(Marcin Grejszczak 撰写),书中提到您可以使用 setUp 方法或 InjectMocks 进行初始化 - 所以我认为它们会是一样的。