java powermockrunner,java – 为什么我在使用PowerMockRunner运行时不能使用@InjectMocks字段匹配?...

我遇到了一个问题,其中对于@InjectMocks的Mockito的@Mock注释的字段注入匹配在有2个相同类型的@Mocks的情况下不起作用.我也使用了@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(MockitoJUnitRunner.class)替换@RunWith(PowerMockRunner.class)时,它工作正常.

另外,如果我刚刚在Parent.java中定义了1个Date变量(比如dateA),并且在ParentTest中定义了一个匹配的模拟注入,那么使用PowerMockRunner.class就可以正常注入.

我必须使用PowerMockRunner.class运行的原因是因为我必须能够模拟静态函数以及构造函数.

我正在运行Junit4.12,Mockito-all-1.10.19和PowerMock-mockito-1.6.2-full.

有没有人看到为什么它没有正确注入PowerMockRunner.class的原因?使用PowerMockRunner.class运行时是否有解决方法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值