私は自分のコードからJUnitを実行しています:
Result result = JUnitCore.runClasses(MyClassNameTest.class);
私が扱っている問題は、MyClassNameが他のクラスに依存していることです。たとえば、その名前がSomeOtherClassであり、そのクラスがMyClassNameに表示されるように「JUnitランタイム」に何らかの形でそのインスタンスを挿入する必要があるとします。出来ますか?
テストを行うために他のクラスは必要ありません。それらをモックすることをお勧めします。Mockitoは私が選ぶものであり、この質問にはさまざまなオプションについての素晴らしい議論があります。他の依存関係をモックしてテストを実行できない場合は、コードをリファクタリングして実行できるようにすることを強くお勧めします。
本当にその(正しい)パスに行きたくない場合は、Springのような依存性注入フレームワークを試して、テストクラスごとに個別のコンテキストを設定することができます。junit4では使用できます@BeforeClass
@BeforeClass
public void initSpring()
{
Application context = getTestAppContext();//should be unique config for this class
requiredProperty = contex.getBean("someProperty");
}
Guiceなどのフレームワークで依存性注入を使用することを検討してください。これは、それが何であるか、そしてそれをどのように使用するかについての良い考えをあなたに与えるはずの紹介です:
確かにそれは可能です。
1 つの方法は、キーが Class または親クラスの名前であり、値が Class または子の名前である Map を持つことです。ルックアップを実行し、インスタンス化のためにファクトリに渡します。