java 如何使用Assert或模拟解决此方法的单元测试?

x7rlezfr  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(158)

我正在处理这个方法,并尝试为它添加一个单元测试。但是,我对结果没有任何想法,所以我尝试使用assertNotNull验证变量cantidad以解决不同的条件,但无法继续。

cantidad = mapsCodigoError.getHaspMapCodigos().size();
if (cantidad != 0) {
    hashMapCodigos = (HashMap<Totalcodigo, Integer>) mapsCodigoError.getHaspMapCodigos();
    Iterator<Entry<Totalcodigo, Integer>> entries = hashMapCodigos.entrySet().iterator();
    List<ValorCodigoOrdenado> listaEstatus = new ArrayList<>();
    listaEstatus=recuperarError(entries,listaEstatus);
    Collections.sort(listaEstatus);
    ValorCodigoOrdenado value;
    for (int i = 0; i < listaEstatus.size(); i++) {
        valor=listaEstatus.get(i);
        listaValoresEstatus.add(value);
    }   
}
enxuqcxy

enxuqcxy1#

可以使用方法进行单元测试的内容:

  • 与其他方法的交互-主要是如果它们来自不同的类,例如调用
  • mapsCodigoError.getHaspMapCodigos().size()
  • mapsCodigoError.getHaspMapCodigos()
  • recuperarError(entries,listaEstatus)在给定巧尽心思构建的entries时计算正确的结果
  • recuperarError的结果稍后在该方法中排序
  • listaValoresEstatus会被listaEstatus中的值填充

我看不出变量是如何“进入”方法的,也看不出以后如何访问它们,但我可以看到代码可以得到一些改进:

  • hashMapCodigos可能应该仅为Map<Totalcodigo, Integer>类型,除非您依赖于仅HashMap提供的属性或方法。
  • 为什么mapsCodigoError.getHaspMapCodigos()的结果必须被强制类型转换,看起来它应该准确地返回您在此方法中需要的类型?
  • 为什么recuperarError只接受Iterator作为第一个参数,而不接受CollectionSet?除了非常特殊的情况外,有比Iterator更好的方法来处理集合的所有项目
  • ValorCodigoOrdenado value应该在for循环中声明,因为之后不需要它。(“最小化可见性”)
  • 要将listaEstatus的所有值都放入listaValoresEstatus , probably a中,只需使用listaValoresEstatus.addAll(listaEstatus)'就足够了--不需要循环--除非在循环中发生了一些神奇的装箱/拆箱或值的自动转换,即使这样,“foreach”循环看起来也会更好。
  • 是否存在拼写错误,因为在循环中声明了value,但使用了valor?看起来此代码根本无法编译。

相关问题