3 回答
TA贡献1936条经验 获得超6个赞
在 Java 中,静态方法并非旨在设置依赖关系。
所以将依赖项切换成 mock 真的很不自然。
您可以static为该字段提供一个设置器,例如:
private static Codec codec;
public static void setCodec(Codec codec){
this.codec = codec;
}
你可以设置一个模拟setCodec(...)但是呃......
但是忘记了,只要把事情做好:重构代码以删除所有静态并引入一个设置编解码器的构造函数。
private Codec codec;
public MyClassUnderTest(Codec codec){
this.codec codec;
}
IOC 可以在这里帮助使被测类成为单例并简化依赖注入。
如果在您的情况下不可能,Java 5 枚举至少可以帮助您解决单例问题。
TA贡献1851条经验 获得超5个赞
有许多不同的捷径可以实现相同的目标(如评论和其他答案中所指出的那样),但从长远来看,并非所有这些方法都是好的。
我建议创建一个实现 Decrypt 功能的 Singleton 类。因此,您不必创建多个实例,也不需要使用静态方法进行解密,并且您可以更轻松地注入您的编解码器(我假设您没有多种类型的编解码器)根据您的评论。但是,如果您这样做,则应相应地调整功能)。
TA贡献1866条经验 获得超5个赞
根据我在这些情况下的经验,我只是在 @Before 方法中准备所有实例:
private Codec codec;
@Before
public void setup() throws CodecException {
codec = new Codec(encryptionType, encryptionKey, false, true, false);
}
添加回答
举报