【问题标题】:Cannot mock method response无法模拟方法响应
【发布时间】:2020-03-04 15:58:36
【问题描述】:

我想模拟这个 SQL 查询的结果:

   public List<RiskFilters> findRiskFiltersByTerminalIdAndType(int terminal_id, String filter_class) {
        String hql = "....";  
        TypedQuery<RiskFilters> query = entityManager.createQuery(hql, RiskFilters.class)....;
        List<RiskFilters> riskFilters = query.getResultList();
        return riskFilters;
    }

我试过这个模型配置:

List<RiskFilters> riskFiltersList = new ArrayList<RiskFilters>();
        riskFiltersList.add(new RiskFilters()); 

        when(riskFilterService.findRiskFiltersByTerminalIdAndType(anyInt(), anyString())).thenReturn(riskFiltersList);

但我在这里得到了 NPE:

List<RiskFilters> filter_list = riskFilterService.findRiskFiltersByTerminalIdAndType(11, "BinCountryCheckFilter");

看起来模拟的参数不正确。您知道如何正确实施吗?

【问题讨论】:

  • 你能告诉我们完整的测试方法吗?谢谢
  • 还有 NPE 的堆栈跟踪。

标签: java spring spring-boot junit junit5


【解决方案1】:

似乎 riskFilterService 没有被模拟,在测试类中你必须用 @Mock 注释 RiskFilterService,用 @InjectMocks 测试的类并确保你初始化所有模拟,比如https://www.baeldung.com/mockito-junit-5-extension 和 How to use Mockito with JUnit5

【讨论】:

    【解决方案2】:

    我认为需要given(...).willReturn(...)。

    参考https://www.baeldung.com/bdd-mockito

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多