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

emeijp43  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(308)

我在看下面的代码

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

我注意到这并没有分配给任何变量。我猜这会导致fubar的每个示例都用这个模拟的delete方法定义,即使它是在其他地方示例化的(我猜这是以这样一种方式发生的,时间并不重要?)有什么叫做mockit的东西和mockito不同吗?我在现有的代码中不止一次地看到过这种模式,所以我不认为这是一个打字错误。
编辑:请不要在没有解释原因的情况下对此进行否决。这是一个我已经花了大量时间试图研究的合法问题。
编辑:没有一篇文章讨论了代码可能的意图是什么,而是详述了我未能确定使用了什么模拟框架。

83qze16e

83qze16e1#

它重新定义了中的delete方法 Fubar 而是包含模拟版本。这会影响之后创建的所有示例,直到在每个测试结束时恢复原始示例。这是可能的,因为它使用自己的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");
    }
}

输出为:“调用mock”

相关问题