3 回答
TA贡献1828条经验 获得超3个赞
在您的情况下,您可以使用Spy而不是模拟。
这将触发构造函数并将一个空列表分配给私有变量,从而逃避 NPE:
private UsersLoader loader;
@Before
public void setUp() {
loader = spy(new UsersLoader());
}
现在您不需要进行此调用:
doCallRealMethod().when(loader).loadExternalUsers(anyBoolean());
请记住,您需要模拟任何不需要在实现时触发的方法。
TA贡献1873条经验 获得超9个赞
不要模拟 UsersLoader.class,这是包含您要测试的方法的类。当您创建一个模拟时,模拟类将不会被实现,而是您可以模拟该类的功能。而是监视它或只是实例化并为功能提供检查手写检查。在后一种情况下,您根本不需要 Mockito。所以你可以窥探它并使用mockito的特性来测试它的功能
TA贡献1796条经验 获得超4个赞
首先,将初始化移动到字段的声明中:
private Collection<User> users = new ArrayList<>();
然后,你可以用你自己的 mock 注入这个字段:
@RunWith(MockitoJUnitRunner.class)
class UsersLoaderTest {
@Mock
private Collection<User> users;
@InjectMocks
private UsersLoader loader;
}
然后验证是否users.add()已与您预期的用户一起调用。
添加回答
举报
