[英]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.