我正在查看以下代码
import mockit.Mock;
import mockit.MockUp;
new MockUp<Fubar>() {
@Mock
delete(final String fooId) {
assertEquals(fooId, "foo123");
}
};
我注意到这没有分配给任何变量。我猜不到(并且我在某处读到类加载器)这导致Fubar的每个实例都被这个模拟方法删除定义,即使它在其他地方被实例化。 (我猜这种情况会发生在时间上并不重要?)Mockit有什么东西和Mockito不同吗?我在现有代码中不止一次看过这种模式,所以我不认为这是一个错字。
编辑:请不要在没有解释原因的情况下对此进行投票。这是一个合法的问题,我已经花了很多时间尝试研究。
编辑:没有一个帖子讨论了代码的可能意图,而是讨论我未能确定使用的模拟框架。
答案 0 :(得分:1)
它重新定义了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");
}
}
输出为:&#34;称为模拟&#34;