gpt4 book ai didi

java - Mockito:使用类型兼容的参数验证重载方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:40:36 24 4
gpt4 key购买 nike

假设您想使用包含以下方法签名的Mockito模拟接口(interface):

public void doThis(Object o);

public void doThis(Object... o)

我需要验证 doThis(Object o)(而不是其他方法)已被恰好调用一次。

首先我认为下面一行可以解决问题:

verify(mock, times(1)).doThis(anyObject());

但是,这似乎适用于 Windows,但不适用于 Linux,因为在此环境中,需要调用其他 doThis 方法。
这是因为 anyObject() 参数似乎与两个方法签名都匹配,并且以或多或少不可预测的方式选择了一个。

我如何强制 Mockito 始终选择 doThis(Object o) 进行验证?

最佳答案

这不是 mockito 问题。

在进一步调查中,I realized that the actual method is chosen at compile-time (JLS §15.12.2) .所以基本上类文件在 windows 和 linux 之间是不同的,这导致了不同的 mockito 行为。

不鼓励使用该接口(interface)(参见 Effective Java,第二版,第 42 项)。我将其更改为匹配以下内容:

public void doThis(Object o);

public void doThis(Object firstObj, Object... others)

通过此更改,将始终选择预期的(第一个)方法。

还有一点:
为什么 windows 上的 java 编译器(eclipse 编译器)产生的输出与 Linux 上的 Oracle JDK javac 不同?

这可能是 ECJ 中的错误,因为我预计 java 语言规范在这里非常严格。

关于java - Mockito:使用类型兼容的参数验证重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com