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框架将通过第一个参数进行实例化,注入自动连接字段,而您可以使用测试类中的所有参数进行实例化,将模拟对象作为构造函数参数传递