【问题标题】:Mockito not mockingMockito 不嘲笑
【发布时间】:2019-07-01 07:48:40
【问题描述】:

我是 Mockito 的新手,并试图模拟一种服务方法。但是,Mockito 无法正确模拟该函数。

这里是部分测试代码:

@Mock
ConditionalLimitDao conditionalLimitDao;

@InjectMocks
ConditionalLimitFilingServiceImpl conditionalLimitFilingService;

Mockito.when(conditionalLimitDao.getAllConditionalLimitProductGroups()).thenReturn(Arrays.asList(clpg1));

班级:

public class ConditionalLimitFilingServiceImpl implements ConditionalLimitFilingService {

    @Inject
    private ConditionalLimitDao conditionalLimitDao;

    @Override
    public List<ConditionalLimitFiling> getConditionalLimitFiling(String filingMonth, Date reportDate)
            throws SQLException, RemoteException {

        conditionalLimitProductGroups = getConditionalLimitProductGroups();

        return something;
    }

    private List<ConditionalLimitProductGroup> getConditionalLimitProductGroups() {
        return conditionalLimitDao.getAllConditionalLimitProductGroups();
    }
}

我期待getAllConditionalLimitProductGroups() 返回一个非空列表。但是,它返回一个空列表。有人可以帮忙吗?

【问题讨论】:

  • 它返回一个空列表而不是 null 的事实表明它在模拟,clpg1 是一个空数组吗?
  • 没有。它不是空的。 clpg1 是 ConditionalLimitProductGroup 类型的对象。
  • Arrays.asList(clpg1) 自己返回什么?
  • 删除@Inject 后尝试测试。这样,您可以确保处理注入的任何人都不会覆盖模拟对象(假设您的测试在启用注入的上下文中运行)。

标签: java junit mockito


【解决方案1】:

我认为您忘记添加此行

MockitoAnnotations.initMocks(this);

这行代码应该放在@Before 方法中,以便为每个测试初始化​​模拟。

【讨论】:

  • 使用 Runner / Extension 应该提供相同的功能,但这可能取决于 JUnit 和 Mockito 版本
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多