1

假设我有一个由其子类扩展的抽象类,我想模拟一个用于超类中受保护数据类型的类。问题是需要模拟的类是默认数据类型,因此无法在包外访问。让我举一个例子来说明我的观点。谢谢你的帮助。

    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();
    }

    }
4

1 回答 1

0

您可以使用 的realClassName属性@Mocked,但最好的解决方案是不要模拟不可访问的类。

您要测试的某些类使用包私有类这一事实通常只是一个实现细节,因此它不应出现在测试代码中。这同样适用于private被测试代码调用的方法:它们不应该被模拟。

于 2012-07-24T12:22:57.007 回答