我遇到了一个问题,其中字段注入与 Mockito 匹配@Mock
注释为@InjectMocks
在有 2 个的情况下不起作用@Mock
相同类型的。我用过@Mock (name = "name_of_var")
语法也是如此,但仍然失败......
这是被测试的类:
import java.util.Date;
public class Parent{
private Date dateA;
private Date dateB;
public void setDateA(Date _dateA){
dateA = _dateA;
}
public void setDateB(Date _dateB){
dateB = _dateB;
}
public Date getDateA(){
return dateA;
}
public Date getDateB(){
return dateB;
}
这是测试本身:
@RunWith(PowerMockRunner.class)
@PrepareForTest({System.class, Parent.class})
public class testParent{
@Mock (name = "dateB") private Date someOtherDate;
@Mock (name = "dateA") private Date someDate;
@InjectMocks Parent p;
@Before
public void setup(){
Mockito.when(someOtherDate.getTime()).thenReturn(500l);
PowerMockito.mockStatic(System.class);
PowerMockito.when(System.currentTimeMillis()).thenReturn(2000l);
}
@Test
public void testGetDateAGetTimeShouldReturn1000() {
Mockito.when(someDate.getTime()).thenReturn(1000l);
Date result = p.getDateA();
assertEquals(1000l, result.getTime());
}
@Test
public void testGetDateBGetTimeShouldReturn500() {
Date result = p.getDateB();
assertEquals(500l, result.getTime());
}
测试时,两者assertEquals
导致NullPointerException
由于以下事实:@InjectMocks
不工作。
现在,当我更换@RunWith(PowerMockRunner.class)
with @RunWith(MockitoJUnitRunner.class)
,效果很好。
另外,如果我刚刚定义了 1Date
变量(比如说,dateA
) in Parent.java
以及要注入的匹配模拟ParentTest
,它会很好地使用PowerMockRunner.class
.
我必须使用 PowerMockRunner.class 运行的原因是我必须能够模拟静态函数以及构造函数。
我正在使用 Junit4.12、Mockito-all-1.10.19 和 PowerMock-mockito-1.6.2-full 运行。
有谁知道为什么它不能正确注入的原因PowerMockRunner.class
?运行时是否有解决方法PowerMockRunner.class
?