如何在没有界面的情况下创建 类 的模拟对象
How to create mock object of classes without interface
interface CheakeId {
public void verify();
}
class CreateAccount implements CheakeId {
public String gmail(){
return "abc@gmail.com";
}
@Override
public void verify() {
System.out.println("verify");
}
}
CheakId cheakid = Mockito.mock(CreateAccount.class);
问题:如果我们创建子class的模拟对象,我们可以将子class的引用存储在父class的引用变量中吗?
class Night {
public void sleep() {
System.out.println("sleep");
}
}
Night night = Mockito.mock(Night.class);
问题:我们可以只创建接口的模拟对象,还是可以创建没有接口的 classes 的模拟对象?
在遥远的过去,人们使用 Java 的动态代理功能来生成模拟,并且仅适用于接口。参见 https://www.baeldung.com/java-dynamic-proxies
另一种生成模拟的方法是使用字节码生成器,如 cglib 和 bytebuddy,这也适用于没有接口的 classes。自 Mockito 1.0、IIRC 以来支持此功能。
一些限制适用。例如。您不能存根在 class 中声明为 final 的方法,也不能存根 equals 和 hashCode 方法。
使用 classes,如果你想保留 class 的实现,你也可以使用 'spy' 而不是 'mock',并且使用 mockito 只是为了验证.
所以基本上:您的代码应该可以工作。
CheakId cheakid = Mockito.mock(CreateAccount.class);
Night night = Mockito.mock(Night.class);
interface CheakeId {
public void verify();
}
class CreateAccount implements CheakeId {
public String gmail(){
return "abc@gmail.com";
}
@Override
public void verify() {
System.out.println("verify");
}
}
CheakId cheakid = Mockito.mock(CreateAccount.class);
问题:如果我们创建子class的模拟对象,我们可以将子class的引用存储在父class的引用变量中吗?
class Night {
public void sleep() {
System.out.println("sleep");
}
}
Night night = Mockito.mock(Night.class);
问题:我们可以只创建接口的模拟对象,还是可以创建没有接口的 classes 的模拟对象?
在遥远的过去,人们使用 Java 的动态代理功能来生成模拟,并且仅适用于接口。参见 https://www.baeldung.com/java-dynamic-proxies
另一种生成模拟的方法是使用字节码生成器,如 cglib 和 bytebuddy,这也适用于没有接口的 classes。自 Mockito 1.0、IIRC 以来支持此功能。
一些限制适用。例如。您不能存根在 class 中声明为 final 的方法,也不能存根 equals 和 hashCode 方法。
使用 classes,如果你想保留 class 的实现,你也可以使用 'spy' 而不是 'mock',并且使用 mockito 只是为了验证.
所以基本上:您的代码应该可以工作。
CheakId cheakid = Mockito.mock(CreateAccount.class);
Night night = Mockito.mock(Night.class);