[英]Using static variable in abstract class
我在基本抽象類中使用了靜態成員變量,並為其使用了靜態獲取器/設置器。 這是我的課程結構:
public abstract class Parent{
private static XmlService xmlService;
//getters and setters for xmlService
}
此xmlService用於子類中以進行xml轉換等。但是,子類的實例是在運行時基於數據使用另一個服務創建的。 現在,我想用junit進行測試,並需要模擬xmlService。 如果不將其設置為靜態,則看不到使用模擬初始化xmlService的任何方法。
因此,我的問題是這種方法(靜態+抽象)是否可行,或者是否破壞了任何OOP概念等。盡管如此,我看不到任何問題,只是想發表意見。
謝謝
編輯:我認為根據評論,我將審查我的設計,並且很可能會采用構造函數注入方法
您有XML服務的設置器-只需在@Before
方法中設置一個模擬對象@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...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.