[英]Mockito - Spring unit tests
我一直在学习有关Java中Mockito框架的更多信息,而我不知道如何完成此单元测试。
基本上,来自控制台的错误指出,当尝试从Foo测试运行Bar.sayHi()方法时,会出现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");
}
}
有人对此有建议吗? 谢谢。
仅创建Ibar的模拟项不会将该模拟项注入@Autowired字段。 自动装配是Spring的工作,而不是Mockito。 您需要显式告诉mockito使用@InjectMock将其注入测试对象
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@InjectMocks
FooImpl foo;
@Mock
IBar bar;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
foo.saySaySay();
}
}
或手动将模拟对象设置在测试对象中。
@Test
public void test() {
FooImpl foo = new FooImpl();
ReflectionTestUtils.setField(foo, "bar", bar);
foo.saySaySay();
}
RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock
//@Spy // Cannot spy on an interface
IBar bar;
@InjectMocks
private FooImpl foo;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
// Given
foo.saySaySay();
verify(bar).sayHi();
// When
// Then
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.