Java 如何在抽象测试类中模拟自动连线实例?

Java 如何在抽象测试类中模拟自动连线实例?,java,spring,spring-boot,mockito,spring-boot-test,Java,Spring,Spring Boot,Mockito,Spring Boot Test,我有一个抽象服务类,它自动连接指定类型的存储库 抽象类服务{ @自动书写 @访问器(fluent=true) @吸气剂(受保护) 私人住宅实例; } 现在我尝试为服务类的子类创建一个抽象测试类 @SpringBootTest 抽象类服务测试{ @自动书写 @访问器(fluent=true) @吸气剂(受保护) 私人T服务实例; //不行! @蚕豆 @访问器(fluent=true) @吸气剂(受保护) 私有U repositoryInstance;//!=serviceInstance.rep

我有一个抽象服务类,它自动连接指定类型的存储库

抽象类服务{
@自动书写
@访问器(fluent=true)
@吸气剂(受保护)
私人住宅实例;
}
现在我尝试为服务类的子类创建一个抽象测试类

@SpringBootTest
抽象类服务测试{
@自动书写
@访问器(fluent=true)
@吸气剂(受保护)
私人T服务实例;
//不行!
@蚕豆
@访问器(fluent=true)
@吸气剂(受保护)
私有U repositoryInstance;//!=serviceInstance.repositoryInstance();
}
但是在实际服务类的测试类中模拟bean是可行的

class OtherServiceTest
扩展服务测试{
@测试配置
OtherServiceTestConfiguration{
//工作!!!
//==serviceInstance().repositoryInstance();
@MockBean私有OtherRepository repositoryInstance;
}
}
第二类服务测试
扩展服务测试{
//工作!!!
//==serviceInstance().repositoryInstance();
@MockBean私有另一个Repository repositoryInstance;
}

如何模拟
SomeServiceTest#repositoryInstance
,使其引用与
SomeServiceTest#serviceInstance.repositoryInstance()相同的对象?

我不知道什么是@Autowire,因为我使用@Autowired。但是,据我所知,在对象声明中使用autowire是一种糟糕的做法

而不是:

@Autowired
MyObject myObject;
在构造函数中使用它:

Repository repository;    

@Autowired
public SomeService(Repository repository) {
    this.repository = repository;
}
在你的测试中:

class SomeServiceTest {

    @Mock
    private Repository repositoryMock;

    private Service serviceUnderTest;

    @Before
    public void init() {
         MockitoAnnotations.initMocks(this);
         serviceUnderTest = new Service(repositoryMock);
    }

您始终可以声明一个默认构造函数和一个all args构造函数。DI框架将通过第一个参数进行实例化,注入自动连接字段,而您可以使用测试类中的所有参数进行实例化,将模拟对象作为构造函数参数传递