假设我有一个由其子类扩展的抽象类,我想模拟一个在超类中使用受保护数据类型的类。问题是需要模拟的类是默认数据类型,因此无法在包外访问它。让我举个例子来说明我的观点。谢谢你的帮助。
class protectedVariableClass{
public SomeObject someObject1;
public SomeObject someObject2;
}
public abstract class superClass {
protected protectedVariableClass protectedVariableClass;
..................
.................
}
public class subClass extends superClass {
protected boolean someMethod() {
protectedVariableClass.someObject1.printValue;
}
}
现在当我尝试使用Jmockit测试它时,我无法为超类的受保护变量创建模拟。
public class SubClassTest{
@Mocked
private protectedVariableClass mockedObject; // Cannot access the class with default data type outside package.
@Test
public void testClass {
subClass s1 = new subClass();
s1.someMethod();
}
}
答案 0 :(得分:0)
您可以使用@Mocked
的{{3}}属性,但最佳解决方案是不模拟不可访问的类。
您要测试的某些类使用包私有类通常只是一个实现细节,因此它不应出现在测试代码中。这同样适用于测试代码调用的private
方法:它们不应被模拟。