次のテストを含むレガシーJUnitテストスイートがあるとします。
public class AwesomeTest {
public void testBusinessLogic() {
...
[awesome mocking library]
...
}
}
public class AmazingTest {
public void testBusinessProcess() {
...
[amazing xml operation]
...
}
}
ここで、AwesomeMockingライブラリがクラスを含むAwesomeBCELバイトコード生成ライブラリに依存しておりorg.useful.XMLClass
、このライブラリにバージョン1のXMLClassがあると仮定します。
ここで、AmazingXml操作がクラスを含むAmazingXml Libraryに依存しておりorg.useful.XMLClass
、このライブラリにバージョン2のXMLクラスがあると仮定します。
また、クラスのバージョン2はバージョン1と下位互換性がないと仮定します。つまり、クラスパスで優先度が高いバージョンはどれでも、他のバージョンの依存関係を壊します。
また、素晴らしいモックライブラリに依存する400のテストがあると仮定します。したがって、書き換えは望ましいオプションではありません。
また、いくつかの重要なビジネス機能が驚くべきxmlライブラリで構築されていると仮定します。これを書き直さないことを強くお勧めします。
このクラスパスの地獄の状況をどのように解決しますか?2つの異なる手動で順序付けられたクラスパスと手動で決定されたテストサブセットを使用してantテストを2回実行する(Antで実行していると仮定)以外は?(私はカスタムクラスローダーのアイデアを受け入れていますが、それはantソリューションを使用したデュアルカスタムクラスパスとほぼ同じレベルの保守性のようです)