2017-08-02 7 views
1

空白を無視する静的プロパティを持つXMLUnitというユーティリティクラスを使用しています。私は、以下に示すテスト、それを使用します。静的なフィールドに応じて同期?

XMLUnit.setIgnoreWhitespace(true); 
    DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual)); 

    detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier()); 
    List<Difference> allDifferences = detailedDiff.getAllDifferences(); 

しかし、いくつかのテストは、空白を無視していないと私はジェンキンスが並列に実行さだと思います。私が他のテストに影響を与えないようにする最良の方法は何ですか?以下のようなXMLUnitクラスで同期できますか?また

synchronized (XMLUnit.class) { 
     XMLUnit.setIgnoreWhitespace(true); 
     DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual)); 

     detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier()); 
     List<Difference> allDifferences = detailedDiff.getAllDifferences(); 
     XMLUnit.setIgnoreWhitespace(false); 
    } 

、私はジェンキンスに並行して構築されている複数のMavenのモジュールがあり、それらはすべて、このクラスを使用する場合の動作は何になりますか?各モジュールにはXMLUnit.classの独自のインスタンスがありますか?

+0

私は問題が同期しているとは思わない。テストの前に 'XMLUnit.setIgnoreWhitespace(true);'が実行されていることを確認するだけです。 '@ Before'に配置してください。JUnit annotation –

+0

あなたは、あなたのテストを並行して実行できるものとできないものに分けなければならないかもしれないと思います。このプロパティに依存するテストは、一方向が必要な場合には並列実行できず、逆も必要な場合は並列実行できません。同期が役立つかもしれませんが、テスト期間によってはロックが長すぎるためにテストがタイムアウトしている可能性があります。 –

+0

良い点ですが、キュウリのステップで使用されます.Junitでは使用されません –

答えて

0

シンクロナイゼーションクラスは、同期クラスブロックの外側にあるxmlのものに頼るものがない限り動作します(これは、フラグの真偽のステートメントを同期するのに十分ではなく、貼り付けたコードは正しいように見えましたが、同期外でそのフラグに頼っているものがあるかどうかを知ることができます)。

これは、暗黙のうちに、テスト全体がその同期ブロック内にあることを意味する場合、これは、そのテスト上の何も並列で実行できないことを意味します。テストを分類し、「xml依存」テストが順番に実行されるようにしてください(残りは並列に実行できます)。

質問については、何があっても問題はありません。同じプロセスでロックすれば何も壊れません。異なるプロセスであれば、テストは完全に分離されています。

関連する問題