私はSpring 3.0とjUnit 4.8を使用しており、単体テストを開発しようとしています。
実際、jUnit によって使用されるアプリケーション コンテキストにロードされた XML で定義されたテスト ケースで、依存性注入を使用して Bean のプロパティ (ファイル) を設定しようとしているだけです。
jUnit 4アプローチの注釈を使用してロードされたXMLファイル構成を使用しています。これは、すべてのテスト クラスが使用したメインの BaseTest です。
@ContextConfiguration("/test-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Ignore
public class BaseTest { ... }
そして、これはのセクションですtest-context.xml
<context:component-scan base-package="com.test" />
<bean id="ExtractorTest" class="com.test.service.ExtractorTest">
<property name="file" value="classpath:xls/SimpleFile.xls"></property>
</bean>
したがって、テスト()を使用してクラスでやろうとしていることはExtractorTest
、クラスパス内にロードされたファイルで「ファイル」プロパティを設定することだけです。
テストを含むクラスのセクションを次に示します。
public class ExtractorTest extends BaseTest {
private Resource file;
private InputStream is;
public void setFile(Resource file) {
this.file = file;
}
@Before
public void init() {
this.is = this.getClass().getResourceAsStream("/xls/SimpleFile.xls");
Assert.assertNotNull(is);
}
@Test
public void testLoadExcel() throws IOException {
// file is always null, but the InputStream (is) isn't!
Assert.assertNotNull(file.getFile());
InputStream is = new FileInputStream(file.getFile());
HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(is));
// todo...
}
}
問題は、ブレークポイントを追加し、Spring がプロパティを OK に設定しているため、セッターが機能することです。しかし、テスト メソッドが開始されると null になります。これは、実行中の別のインスタンスが原因である可能性がありますが、なぜでしょうか? テスト用のアプリケーション コンテキストの XML を使用してロードされるように「ファイル」を設定するにはどうすればよいですか? jUnitを使用して割り当てることができず、その理由と方法がわかりません。@Before メソッドでの書き込みを避けようとしていますが、それが良いアプローチであるかどうかはわかりません...
ありがとうございました。
PD: 私の英語でごめんなさい;-)