2012-07-24 197 views
0

假设我有一个抽象类,它的子类扩展了,我想模拟一个在超类的受保护数据类型中使用的类。问题是需要模拟的类是默认数据类型,所以它不能在包外部访问。让我举个例子说明我的观点。谢谢你的帮助。抽象类的默认类型变量

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进行测试时,我无法为超类的Protected变量创建模拟。

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

您可以使用@MockedrealClassName属性,但最好的解决办法是模拟不可接近的类。

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