Mockit——这段代码是否覆盖了代码中的所有实例?

Mockit -- is this code over-riding all instances in the code?

我在看下面的代码

import mockit.Mock;
import mockit.MockUp;
new MockUp<Fubar>() {
    @Mock
    delete(final String fooId) {        
        assertEquals(fooId, "foo123");
    }
};

我注意到这没有分配给任何变量。我猜想不知何故(我在某处读到 class 加载程序)这导致 Fubar 的每个实例都用这个模拟方法 delete 定义,即使它在其他地方实例化。 (我猜这会以一种时间无关紧要的方式发生?)是否有一种叫做 Mockit 的东西与 Mockito 不同?我在现有代码中不止一次看到这种模式,所以我不认为这是一个错字。

编辑:请不要在没有解释原因的情况下对此投反对票。这是一个合理的问题,我已经花了很多时间尝试研究。

编辑: 没有人 post 讨论代码的可能意图是什么,而是专注于我未能确定使用的模拟框架。

它重新定义了 Fubar 中的 delete 方法以包含模拟版本。这会影响之后创建的所有实例,直到在每个测试结束时恢复原始实例。这是可能的,因为它使用自己的 Java 代理,允许重新定义 类,因为程序是 运行.

例如:

import mockit.Mock;
import mockit.MockUp;

class Fubar {
    public void delete(String fooId) {
        System.out.println("Called real");
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        new MockUp<Fubar>() {
            @Mock
            void delete(final String fooId) {
                System.out.println("Called mock");
            }
        };

        new Fubar().delete("foo123");
    }
}

输出为:"Called mock"