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"
我在看下面的代码
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"