如何解决在Spring Boot中使用Junit / Mockito测试ByteBuddy ServiceImpl
我们目前在使用Mockito作为测试框架的SpringBoot环境中测试ByteBuddy生成的代码时遇到了问题。
问题可以描述如下。我们有一个通用的服务类和许多用例,其中该服务类的代码大约是90%相同,但是在一种初始化方法上有所不同。因此,我们决定不重复90%的代码,而是让ByteBuddy生成此代码的子类来决定使用哪种初始化方法。
有必要提及的是,由于其他情况,我们无法重组该特定服务以形成抽象类或委托或“正常”的东西。 ;-)
结果是,我们有多个由ByteBuddy生成的Spring bean,它们的init方法不同。一些伪代码可能会可视化它:
@Service
public class Service {
...many,many code equal to all ByteBuddy implementations....
public firstServiceInit() {
...
}
public secondServiceInit() {
...
}
现在,有一个配置类
@Configuration
public class ServiceConfiguration {
@Bean(value = "firstServiceImpl")
public Service createFirstServiceImpl() {
....ByteBuddy generated code subclassing Service class with init method "firstServiceInit()"
}
@Bean(value = "secondServiceImpl")
public Service createSecondServiceImpl() {
....ByteBuddy generated code subclassing Service class with init method "secondServiceInit()"
}
....and so on up to ten different deFinitions....
到目前为止,太好了。所有工作均按预期进行,我们针对特定情况使用ByteBuddy的解决方案似乎是正确的选择。
那有什么问题?
使用junit5 / Mockito测试不同的实现是问题所在。我们的问题是如何通过测试生成的类来实现。我们试图使它像这样工作:
@RunWith(powermockrunner.class)
@powermockrunnerDelegate(springrunner.class)
@SpringBoottest
@PowerMockIgnore({"javax.management.*","javax.net.ssl.*"})
public class ServiceTest {
@InjectMocks
Service firstServiceImpl;
....
}
但是,Mockito仅创建Service类的“普通”定义实例,而不是通过ByteBuddy创建并在ServiceConfig类中定义的实例。
我们通过更改测试类上方的注释尝试了许多可能的配置,但没有成功。
因此,问题是:通常是否有可能使其在特定环境下工作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。