Java 继承抽象类的抽象类中的Mock方法
我在spring boot项目中有一个扩展抽象类的服务Java 继承抽象类的抽象类中的Mock方法,java,spring,mockito,Java,Spring,Mockito,我在spring boot项目中有一个扩展抽象类的服务 public class TestService extends AbstractTest1Service { // some methods } public abstract class AbstractTest1Service extends AbstractTest2Service { public String doSomething() { return writeText(); } }
public class TestService extends AbstractTest1Service {
// some methods
}
public abstract class AbstractTest1Service extends AbstractTest2Service {
public String doSomething() {
return writeText();
}
}
public abstract class AbstractTest2Service {
String writeText() {
return "text";
}
}
当我想测试
TestService
:您的TestService
类时,有没有办法模拟writeText()
方法:
公共类TestService扩展了AbstractTest1Service{
抽象测试2服务抽象测试2服务;
公共字符串doSomething(){
abstractTest2Service.writeText();
System.out.println(“通过!”);
返回“全部选中”;
}
}
您的
TestServiceTest
类应该如下所示:
import org.junit.Assert;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.mockito.InjectMocks;
导入org.mockito.Mock;
导入org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
公共类TestServiceTest{
@注射模拟
测试服务测试服务;
@嘲弄
抽象测试2服务抽象测试2服务;
@试验
公共void测试服务(){
Assert.assertEquals(“全部选中”,testService.doSomething());
}
}
注意:不要使用@Spy
而不是@Mock
,Spy将尝试检查抽象类方法的实际实现,而不是
因此,您的测试将被忽略。只需使用@Mock
使用@Spy将出现以下错误:
无法为“abstractTest2Service
”字段实例化@Spy
。你
没有提供在字段声明中进行间谍活动的实例,所以我
试图构造实例。但是,我失败了,因为:类型
“AbstractTest2Service
是一个抽象类
您的
TestService
类:
公共类TestService扩展了AbstractTest1Service{
抽象测试2服务抽象测试2服务;
公共字符串doSomething(){
abstractTest2Service.writeText();
System.out.println(“通过!”);
返回“全部选中”;
}
}
您的
TestServiceTest
类应该如下所示:
import org.junit.Assert;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.mockito.InjectMocks;
导入org.mockito.Mock;
导入org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
公共类TestServiceTest{
@注射模拟
测试服务测试服务;
@嘲弄
抽象测试2服务抽象测试2服务;
@试验
公共void测试服务(){
Assert.assertEquals(“全部选中”,testService.doSomething());
}
}
注意:不要使用@Spy
而不是@Mock
,Spy将尝试检查抽象类方法的实际实现,而不是
因此,您的测试将被忽略。只需使用@Mock
使用@Spy将出现以下错误:
无法为“abstractTest2Service
”字段实例化@Spy
。你
没有提供在字段声明中进行间谍活动的实例,所以我
试图构造实例。但是,我失败了,因为:类型
“AbstractTest2Service
是一个抽象类
您想测试TestService类?我不明白为什么不可能这样做。我想测试TestService.class,它使用doSomething()方法,我想模拟该方法以返回不同的值。为什么您不能只模拟
doSomething
?顺便说一句,我认为你可以像往常一样轻松地模仿writeText
。您可以模拟writeText
,然后doSomething
返回值,该值是由mockwriteText
doSomething生成的。doSomething是包私有的,我在示例代码中犯了错误。您想测试TestService类吗?我不明白为什么不可能这样做。我想测试使用doSomething()的TestService.class我想要模拟的方法返回不同的值为什么不能只模拟doSomething
?顺便说一句,我认为你可以像往常一样轻松地模仿writeText
。您可以mockwriteText
然后doSomething
返回值,该值由mockwriteText
doSomething是包私有的,我在示例代码中犯了错误