模拟抽象类的默认类型变量

时间:2012-07-24 00:08:36

标签: mocking abstract-class default jmockit

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

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

    }

1 个答案:

答案 0 :(得分:0)

您可以使用@Mocked的{​​{3}}属性,但最佳解决方案是模拟不可访问的类。

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