Java Mockito-即使使用了returns\u self,mock builder也会返回null对象
我已经在Android中创建了一个通知测试,并且正在努力创建模拟对象。当我试图模拟下面的Java Mockito-即使使用了returns\u self,mock builder也会返回null对象,java,android,unit-testing,mockito,Java,Android,Unit Testing,Mockito,我已经在Android中创建了一个通知测试,并且正在努力创建模拟对象。当我试图模拟下面的notificationBuilder时,我得到一个空的notificationBuilder,这会破坏我的测试 我的最小代码显示了这一点: @Before public void setUp() { NotificationCompat.Builder notificationBuilder = Mockito.mock(NotificationCompat.Builder.class, Mocki
notificationBuilder
时,我得到一个空的notificationBuilder
,这会破坏我的测试
我的最小代码显示了这一点:
@Before
public void setUp() {
NotificationCompat.Builder notificationBuilder = Mockito.mock(NotificationCompat.Builder.class, Mockito.RETURNS_SELF);
}
其中notificationBuilder为空。如何获取模拟NotificationCompat.Builder作为返回值?我以为这就是返回SELF
应该做的
对于空值,我无法将我的生成器用作when().then()的一部分进行进一步测试。Mockito.mock(…)正在返回null
,因为您没有模拟任何内容。您需要使用@Mock
注释声明一个全局变量,并在setUp()
方法中初始化您的Mock对象(只要它上面有@之前的注释,您就可以调用它)。请尝试下面的代码片段
@Mock
NotificationCompat.Builder notificationBuilder;
@Before
public void setUp(){
notificationBuilder = Mockito.mock(NotificationCompat.Builder
.class);
}
@Test
public void testSharedPrefInjection(){
assertNotNull(notificationBuilder);
}
问题是您正在创建一个mock,它最终是@Before
方法中的一个局部变量
当您以后运行测试时,这个变量不再可访问,也没有任何类的全局模拟的概念(至少在vanilla Mockito中)
因此,要么使用全局变量,然后在设置方法中手动初始化该变量:
private NotificationCompat.Builder notificationBuilder;
@Before
public void setUp() {
notificationBuilder = Mockito.mock(NotificationCompat.Builder.class);
}
或者使用Mockito注释:
@Mock
private NotificationCompat.Builder notificationBuilder;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}