我有一个抽象服务类,可以自动装配指定类型的存储库。
abstract class SomeService<T extends SomeRepository, U ...> {
@Autowrired
@Accessors(fluent = true)
@Getter(PROTECTED)
private U repositoryInstance;
} 现在,我正在尝试为服务类的子类创建一个抽象测试类。
@SpringBootTest abstract class SomeServiceTest<T extends SomeService, U extends SomeRepository , V ...> {
@Autowrired
@Accessors(fluent = true)
@Getter(PROTECTED)
private T serviceInstance;
// DOES NOT WORK!
@MockBean
@Accessors(fluent = true)
@Getter(PROTECTED)
private U repositoryInstance; // != serviceInstance.repositoryInstance();
}
但是在实际服务类的测试类中模拟Bean是可行的。
class OtherServiceTest extends SomeServiceTest<OtherService, OtherRepository, ...> {
@TestConfiguration
OtherServiceTestConfiguration {
// WORKS!!!
// == serviceInstance().repositoryInstance();
@MockBean private OtherRepository repositoryInstance;
}
}
class AnotherServiceTest extends SomeServiceTest<AnotherService, AnotherRepository, ...> {
// WORKS!!!
// == serviceInstance().repositoryInstance();
@MockBean private AnotherRepository repositoryInstance;
}
我该如何模拟SomeServiceTest#repositoryInstance以便它引用与相同的对象SomeServiceTest#serviceInstance.repositoryInstance()?
问题来源:stackoverflo
我不知道什么是@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);
}
答案来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。