java

您所在的位置:网站首页 mockito方法nullexception java

java

2024-05-19 13:47| 来源: 网络整理| 查看: 265

我有两个 Generic 类的通用对象:

Generic genericOne; Generic genericTwo;

我不得不 mock :

when(someObject.someMethod(Matchers.any())) .thenReturn(responseOne()); when(someObject.someMethod(Matchers.any())) .thenReturn(responseTwo());

问题是由于类型删除,mockito 将看不到这两个方法调用之间的区别——它们都被识别为 Generic类(class)。

有什么方法可以区分这两个方法调用吗?

最佳答案

Mockito 不知道 any() 前面指定了哪些泛型调用,无论如何都没关系。

记录模拟行为所期望的参数必须依赖于:

值(根据 equals() 或者在俘虏方面如果equals()是不够的 或any()如果模拟调用中的参数值无关紧要或在测试夹具中未知

这些永远不必依赖于指定的泛型。

有一个很好的例子,看Mockito.anyCollectionOf(Class clazz)或 Mockito.anyMapOf(Class keyClazz, Class valueClazz) .

这些方法知道类已通过,但无论如何,它们的规范说明:

This method don't do any type checks, it is only there to avoid casting in your code. This might however change (type checks could be added) in a future major release.

通常您要检查的是模拟方法是使用预期参数而不是任何参数调用的:所以 any()永远不会实现它。 因此,尝试仅检查通用类型但接受任何值作为参数似乎是一种反模式模拟。

在你的例子中,如果 equals()不方便在when()中匹配录音,使用 Mockito captor 和 verify()并在模拟执行后进行检查。

关于java - Mockito 模拟 when() 两种不同类型的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316348/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3