许多代码需要使用一些全局标志或属性来控制应用程序的流程。在很多情况下,维护动态缓存是必要的,动态缓存将有一个标志来锁定/解锁特定的(新)代码。
对于所有此类场景,我通常这样写:
'''
void someMethod(Data data){
if(DynamicProperty.getValue("OK"))
// Do Something
}
DynamicPropery
是一个单例,它定期从数据库刷新缓存。
问题是单元测试有点棘手,到目前为止我已经使用Jmockit来解决这个问题 - 而且它工作得很好。
但我想知道是否有更好的方法来编写这样的方法,可以更容易进行单元测试。
最佳答案
您可以将所有属性检索隔离在某种 PropertyResolverBean
中,然后将其注入(inject)到您的 SUT 中并替换静态调用:
private PropertyResolverBean injectedPropertyResolverBean;
void someMethod(Data data){
if(injectedPropertyResolverBean.getValue("OK"))
// Do Something
}
然后,您可以使用 Mockito 的基本功能来模拟该 bean 并按照您想要的方式预配置测试。
最终您将获得遵循 SRP 规则的更易于维护、可读和可测试的代码。
关于java - 如何使使用全局动态属性的代码可进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505058/