在抽象类中使用静态变量

时间:2014-04-15 14:21:13

标签: java oop

我在我的基本抽象类中使用静态成员变量,并为它使用静态getter / setter。这是我的班级结构:

public abstract class Parent{
     private static XmlService xmlService;
     //getters and setters for xmlService     
}

此xmlService用于子类以进行xml转换等。但是,子类的实例是在运行时根据使用其他服务的数据创建的。现在我想用junit测试并需要模拟xmlService。如果我不使它静态,我没有看到任何方法用mock初始化xmlService。

所以我的问题是这种方法(静态+抽象)是否正常,或者它是否破坏了任何OOP概念等。虽然我没有看到任何问题,但只是想要一个意见。

由于

编辑:我认为根据评论,我会审核我的设计,很可能会采用构造函数注入方法

1 个答案:

答案 0 :(得分:1)

您有一个XML服务的setter - 只需在@Before方法中设置一个模拟对象:

public class ParentTest {
    private Parent parent;
    private XmlService origService;

    @Before
    public void setUp() {
       parent = new Parent() { /* anonymously implement the abstract methods */ };
       origService = parent.getXmlService();
       XmlService moxkService = Mockito.mock(XmlService.class);
       // record some behavior...

       parent.setXmlService(mockService);
    }

    @After
    public void tearDown() {
        // Restore the original service
        parent.setXmlService(origService);
    }

    // unit tests...
}