java - 验证是否通过反射调用了常规(非模拟)对象的方法
问题描述
我的代码如下所示:
abstract class Parent {
public void dispatch(...) { ... }
}
方法的工作dispatch
就是根据参数的值来判断应该调用子类的哪个方法,然后调用它;这是通过运行时注释分析完成的。所以,如果我有一个看起来像这样的子类:
class Child extends Parent {
@CallThisMethodIfA
public Thing aMethod(...) { ... }
@CallThisMethodIfB
public Thing bMethod(...) { ... }
}
然后调用child.dispatch(A)
应该调用aMethod
(其中child
的一个实例Child
)。当然,我在这里尽可能地简化——这些不是我拥有的实际注释和参数。
我的问题是如何测试这种行为。我试过类似的东西:
Child child = new Child(...);
child.dispatch(A);
verify(child, times(1)).aMethod(...)
这给了我一个NotAMockException
因为,当然,child
不是一个模拟,而是一个真实的对象。我不是 100% 确定间谍是如何工作的,但我也尝试过实例化Child
using @Spy
,虽然这没有引发异常,但它也没有注册调用,aMethod
因为我猜,间谍实际上并没有模仿类的内部行为。我该怎么做呢?我想我可以手动初始化Child
并aMethod
返回一个非常具体的实例,Thing
然后我可以检查它,但这对我来说并不干净(如果其他方法恰好返回一个相等的实例怎么办?)
解决方案
推荐阅读
- javascript - 如何使用javascript获取表中选定行的ID
- c++ - 没有匹配的成员函数调用“push_back”
- spring-boot - 为什么 OpenAPI 生成的 Spring 服务器无法解析带有兄弟元素的未包装 XML 数组?
- php - Wordpresss 如何解决此问题:警告:“继续”定位开关等同于“中断”
- javascript - 为什么'margin-top:-500px;' 不管用?
- reactjs - 当 API 返回任何错误时,catch 块不会被触发
- powershell - [System.IO.Path]::GetFileName() 与文件夹路径
- api - 如何使用 postman 和 newman 实现数据驱动测试?
- c# - 我想使用 C# 以编程方式管理 Firefox 设置 (about:config)
- python - 如何在 Oracle Solaris Sparc 11.4 上安装 Tesseract 4 和 opencv 4?