我有我不想觸及的遺留代碼。在不觸及代碼的情況下替換實例化類的實現(java)
public class LegacyCode{
public LegacyCode() {
Service s = new ClassA();
s.getMessage();
}
}
凡ClassA
提供了CORBA服務調用。
public class ClassA implements Service{
@Override
public String getMessage() {
// Make CORBA service call...
return "Class A";
}
}
和接口Service
樣子;
public interface Service {
String getMessage();
}
出於測試目的,我要替換的Service
有存根的實現(LegacyCode
由ClassA
實現)。
public class ClassB implements Service {
@Override
public String getMessage() {
return "Stub Class B";
}
}
到目前爲止好。但是在沒有任何修改的情況下,有可能在ClassA
的實例化處加載ClassB
而不是ClassA
?
// In my test workbench
new LegacyCode(); // "Stub Class B"
我試圖寫一個自定義類加載和Java虛擬機的參數在應用程序啓動加載它,但只有第一類(這裏LegacyCode
)是由加載器加載。
在此先感謝
最好是從頭開始使用依賴注入。那麼這些問題將是沒有意義的。 –
感謝您的回答。不幸的是,現有的代碼(很多類)目前不提供此功能。我們不想在沒有新的業務要求的情況下做出這些判斷。但是我們需要在沒有CORBA調用的情況下測試代碼。 – abertschi
這是爲了單元測試,如果是這樣的話,你可以用功率模擬來完成。讓我知道如果是這樣,我會解釋如何。 – Avi