[英]Mockito - Impossible stubbing mocked object
我是Java世界的新手,但很难理解为什么不能对模拟对象的方法进行存根...
@RunWith(MockitoJUnitRunner.class)
public class ChildBLLIT extends BaseInteractorIT {
@InjectMocks
private ChildBLL ChildBLL = Mockito.mock(ChildBLL.class);
@Before
public void setUp() {
ChildBLL.engine = engineMock;
}
/**
* Test of getZipStatistics method, of class ChildBLL.
*/
@Test
public void testGetZipStatistics() {
final String testZipStatisticsText = "DummyZipStatistics";
//This method will throw the null pointer exception
when(ChildBLL.engine.getZIPStatistics()).thenReturn(testZipStatisticsText);
ChildBLL.getZipStatistics();
verify(ChildBLL.engine).getZIPStatistics();
}
}
当我尝试对getZIPStatistics()方法进行存根处理时,我当然总是得到一个空指针异常,因为在getZIPStatistics()方法中有一个私有对象,该对象没有被嘲笑……在我看来,Mockito确实做到了没有嘲笑私有字段...不幸的是,这是来自另一个项目:
public class BaseIT {
@Mock
protected static FromOtherProject engineMock;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
}
在这里,我模拟了引擎变量,但是如何模拟/存根getZIPStatistics()方法呢? 这是这种方法:
public class FromOtherProject {
//...
public final String getZIPStatistics() {
return ZIPStatistics.toString();
}
}
我能做什么?
让我们假设一个简单的类...
public class Account {
public String getPassword() {
return "abc";
}
}
...以及包含它的简单类...
public class AccountHolder {
private Account account;
public String getAccountPassword() {
return this.account.getPassword();
}
}
因此,现在我们为所有基于帐户的测试提供了一个简单的基类...
public class AccountBasedTest {
@Mock
protected Account account;
}
...以及实际测试AccountHolder的类...
@RunWith(MockitoJUnitRunner.class)
public class AccountHolderTest extends AccountBasedTest {
@InjectMocks
private AccountHolder accountHolder;
@Test
public void getAccountPasswort_must_return_account_password() {
Mockito.when( this.account.getPassword() ).thenReturn ("xyz");
Assert.assertEquals("xyz", this.accountHolder.getAccountPassword());
}
}
就这样。 @InjectMocks等注释也会在超类中查找,因此您将获得模拟帐户,该帐户将被放入AccountHolder中。 无需调用MockitoAnnotations.initMocks
。 它不应该受到伤害,但是不需要,因为您已经在使用MockitoJUnitRunner
,它正是这样做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.