2016-06-22 5 views
0

このようなテストケースをもっと読みやすくするにはどうすればよいですか? XMLを使用するテストケースを作成するにはどうすればよいですか?

@Test 
public void test1() throws Exception { 
    assertEquals("{\"Root\":{\"Name\":\"Paul\",\"Age\":\"10\",\"Enabled\":\"true\"}}", 
      transformer.transformXmlToJson("<Root><Name>Paul</Name><Age>10</Age><Enabled>true</Enabled></Root>")); 
} 

は、私は手動でのような文字列に改行を配置する必要があり

@Test 
public void test1() throws Exception { 
    assertEquals(
      "{\"Root\":" 
      + "{" 
      + "\"Name\":\"Paul\"," 
      + "\"Age\":\"10\"," 
      + "\"Enabled\":\"true\"" 
      + "}" 
      + "}", 
      transformer.transformXmlToJson(
        "<Root>" 
        + "<Name>Paul</Name>" 
        + "<Age>10</Age>" 
        + "<Enabled>true</Enabled>" 
        + "</Root>")); 
} 

を行います。しかし、私は日食でクラスをフォーマットするとき、全体のフォーマットはトスのために行きます。

これらのテストケースを作成して読みやすくするための良い習慣はありますか?

同様に、より良い形式でJSONを書く方法がありますか?

答えて

0

フォーマットについては、hereクラス/メソッド内の特定のセクションのフォーマッタを無効にする方法を参照してください(これは私のコードでも時折行います)。

しかし、それ以外の場合は、assertThatを使用し、この種の比較用のカスタムマッチャを記述することを検討してください。

修正:いずれにしてもassertThatを使用することを強くお勧めします。カスタムマッチャーを作成することが理にかなっているかどうかは問いません。

+0

私はフォーマッタを無効にすることはできません。 Formatterは私にとって非常に役に立ちます。 assertThat()を使って試してみます。 –

+1

私のリンクを調べるのが面倒だったら、コード内の**特定のセクション**のフォーマッターを無効にすることができます。もちろん、私はフォーマッタを完全に無効にすることを勧めません! – GhostCat

+0

申し訳ありません。あなたが言及していた、私のテストコードでそれを使用する方法を探していたassertThatによって引き継がれました。これはできます。しかし、私は、この設定を可能にするために、これらのテストに取り組んでいる皆にeclipseで尋ねなければなりません。これを行う前に、他の解決策を探すだろう。 –

0

私は最善のアプローチがあることだと思う:

  1. JSONやXMLを表してすでに1が存在しない場合(たとえばA.java)Javaクラスを作成します。このクラスのequals()hashCode()を上書きします。
  2. 実際のJSON文字列を(クラスAの)Javaオブジェクトobj1に変換します。
  3. 実際のXML文字列を(クラスAの)Javaオブジェクトobj2に変換します。
  4. obj1とobj2が等しいかどうかを判定します。
1

個人的には、リソースファイルからXMLまたはJSONデータを読み込みます。何かのように:

src 
+-- test 
    +-- java 
    | +-- mypackage 
    |  +-- MyTestClass.java 
    \-- resources 
     +-- mypackage 
      +-- test1_input.xml 
      +-- test1_expected_output.json 

テストクラス(コモンズ-IOを使用しますが、任意のIOライブラリまたは独自のコードはどうなる):

もちろん
package mypackage; 

import java.io.IOException; 

import org.apache.commons.io.IOUtils; 
import org.junit.Test; 

public class MyTestClass { 

    @Test 
    public void test1() throws IOException { 
     final String xmlInput = IOUtils 
       .toString(getClass().getResourceAsStream("test1_input.xml")); 
     final String expectedJsonOutput = IOUtils 
       .toString(getClass().getResourceAsStream("test1_expected_output.json")); 
     // Do the test 
    } 
} 

、テストコードは、簡単に束に適用されます異なる入力を持つテストケースの

これは可読性の面で良いアイデアかどうかは、おそらく大部分は味の問題です。


別の態様では、JSON(またはXML)文字列を比較する方法です:あなたは本当にJSONがちょうど異なってフォーマットされている場合、アサーションは失敗したくない(フィールド間の余分なスペースや改行を...)?

  • JSONassert(JSONのために)
  • hamcrest-json
  • (JSONのために、あなたが使用している場合Hamcrestのマッチャー:いない場合は、JSON(またはXML)などのデータを、実際のstrcutureを比較するライブラリを使用して検討すべきです;それはJSONassertに基づいている)
  • XMLUnitは(XMLのため、XMLAssertクラスを参照してください)
  • そしておそらく他の人...