Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承抽象类的抽象类中的Mock方法_Java_Spring_Mockito - Fatal编程技术网

Java 继承抽象类的抽象类中的Mock方法

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(); } }

我在spring boot项目中有一个扩展抽象类的服务

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
返回值,该值是由mock
writeText
doSomething生成的。doSomething是包私有的,我在示例代码中犯了错误。您想测试TestService类吗?我不明白为什么不可能这样做。我想测试使用doSomething()的TestService.class我想要模拟的方法返回不同的值为什么不能只模拟
doSomething
?顺便说一句,我认为你可以像往常一样轻松地模仿
writeText
。您可以mock
writeText
然后
doSomething
返回值,该值由mock
writeText
doSomething是包私有的,我在示例代码中犯了错误