我在我的基本抽象类中使用静态成员变量,并为它使用静态getter / setter。这是我的班级结构:
public abstract class Parent{
private static XmlService xmlService;
//getters and setters for xmlService
}
此xmlService用于子类以进行xml转换等。但是,子类的实例是在运行时根据使用其他服务的数据创建的。现在我想用junit测试并需要模拟xmlService。如果我不使它静态,我没有看到任何方法用mock初始化xmlService。
所以我的问题是这种方法(静态+抽象)是否正常,或者它是否破坏了任何OOP概念等。虽然我没有看到任何问题,但只是想要一个意见。
由于
编辑:我认为根据评论,我会审核我的设计,很可能会采用构造函数注入方法
答案 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...
}