2011-10-25 7 views
2

状況:いくつかの外部WebServicesで動作するクラスMyControllerがあります。jUnitテストからmavenフィルタリングを起動する方法は?

public class MyController { 
    private String integrationWebServiceURL; 
} 

このクラスのWebサービスのURLが記述子で構成コントローラ豆中に渡される(applicationContext.xmlを

<bean id="myController" class="com.mypath.MyController"> 
    <property name="integrationWebServiceURL" value="${integration.web.service.url}"/> 
</bean> 

値は動的であり、実際の値は、プロパティに格納されアプリケーションファイル。プロパティ

integration.web.service.url=${pom.integration.web.service.url} 

しかし、それは終わりではありません - 本当のVA lueは、filtering = trueのmavenプロジェクトファイル(pom.xml)に保存されます。我々はを使用する場合

<pom.integration.web.service.url>http://mywebservices.com</pom.integration.web.service.url> 

ので、MVNテストのpom.xmlから値がapplication.propertiesにプレースホルダを適切にコピーし、その後、私のクラスのテストはうまく機能しているをインストールします。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"/applicationContext.xml"}) 
public class MyControllerTest { 

} 

質問:異なる設定でプレイできるようにし、IDEのデバッグ機能を使用するために、私はIDEから私のテストを起動する必要があります。しかし、単純なMavenビルドをせずにIDEからこのテストを簡単に起動すれば、私のWebサービスアドレスは単にapplication.propertiesから取得され、 "$ {pom.integration.web.service.url}"に等しくなります(例えば、Mavenフィルタリングのプロセスはdoesnテストの前に仕事をしないでください)。 pom.xmlから自分の値を抽出するためにMaven、Spring、またはjUnitを調整するにはどうすればよいですか?

:私はテストクラスで使用されるapplication.propertiesまたはapplicationContext.xmlをファイルに明示的に私は簡単なセットをできることを、この値を知っているが、私はのpom.xmlからこの値を抽出する必要があります。

mvn test 

その後、すべてがポンポン変数のフィルタリングで行く必要があります。

+0

あなたの場合Eclipseを使用するか、M2EclipseまたはM2Eプラグインを試しましたか? – Ralph

+0

POMから値を取得する必要があるのはなぜですか?それとも、私が本当に意味するのは、POMがその情報を保存するのに適している理由は何ですか?私はそのようなデータを、成果物のプロパティファイル_outside_に保存し、実行時にのみアクセスすることをお勧めします。テスト用クラスパス上でのみ利用可能な、テスト固有のバージョンのプロパティファイルを作成することができます。 –

+0

@Ralph IntelliJ IDEAは私のIDEです。 – dim1902

答えて

0

は、単にのように、Mavenのを実行します。 特定のプロパティファイルに対してtestResourcesを持つことができます。またはapplicationContext-test.xmlです。

+0

IDEからクリーンビルド(つまりMavenビルド以外のビルド)を行った後にテストが必要だったと思います。 –

0

最高の解決策は、Maven対応のIDEを使用し、ソースをビルドする必要があるときにmvn copy-resourcesを実行することです。 Eclipseの場合はm2e、IDEAの場合はMavenプラグインも同様です。それが何らかの理由でできない場合は

、あなたは一般的なテストコードの静的コードブロックでは、たとえば、手動でターゲットを実行することができます(それは常に一度だけ実行されます):

static { 
    Process p = Runtime.getRuntime().exec("mvn copy-resources"); 
    IOUtils.copy(p.getInputStream(), System.out); 
    p.waitFor(); 
} 
関連する問題