最近、単体テストのシステム プロパティをロードできるソリューションを見つけました。テストを個別に実行する場合はうまく機能しますが、テスト スイート全体を実行することを選択すると失敗します。誰かが理由を教えてもらえますか?
最初のステップは、テスト アプリケーション コンテキストをロードすることです。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
次のステップは、システム プロパティをロードするクラスを作成することです。
import java.io.InputStream;
import java.util.Properties;
import javax.annotation.PostConstruct;
import org.springframework.core.io.Resource;
public class SystemPropertiesLoader{
private Resource resource;
public void setResource(final Resource resource){
this.resource = resource;
}
@PostConstruct
public void applyProperties() throws Exception{
final Properties systemProperties = System.getProperties();
final InputStream inputStream = resource.getInputStream();
try{
systemProperties.load(inputStream);
} finally{
inputStream.close();
}
}
}
最後のステップは、これをテスト アプリケーション コンテキストで Bean としてリストすることです。
<bean class="com.foo.SystemPropertiesLoader">
<property name="resource" value="classpath:localdevelopment_Company.properties" />
</bean>
テスト スイートを実行すると、すべてシステム プロパティに依存するいくつかのテストが失敗します。特定のテストに行って実行すると、合格します。私はそれをデバッグし、SystemPropertiesLoader のコードが実行されていること、および他のすべての Bean がコンテキストから正常にプルされていることを確認しました。ただし、プロパティにアクセスしようとするとすべて null になるため、プロパティが正しく読み込まれません。助言がありますか?