2017-05-30 12 views
0

にアサートI持っている。このような異なるエンドポイントに返され作られたJsonObjectに主張するいくつかのテスト、:リユースJUnitは異なるクラス

JsonElement product = asJsonObject.get("product"); 
JsonElement type = product.getAsJsonObject().get("type"); 
Assert.assertEquals(ProductType.PRODUCT_1.name(), type.getAsString()); 
JsonElement name = product.getAsJsonObject().get("name"); 
Assert.assertEquals("name", name.getAsString()); 

これは、Javaコードの多くは、右?同じJsonを返す複数のエンドポイントがあり、期待される結果を保証するために同じアサートを行う必要があります。

しかし、私は上記のコードを再利用する方法を見つけようとしています。これはこの種の問題のために良い方法です...

class AssertProduct { 

    private JsonElement product; 

    AssertProduct(JsonElement product) { 
     this.product = product; 
    { 

    boolean assert(String name, String type) { 
     JsonElement type = product.getAsJsonObject().get("type"); 
     Assert.assertEquals(type, type.getAsString()); 
     JsonElement name = product.getAsJsonObject().get("name"); 
     Assert.assertEquals(name, name.getAsString()); 
    } 

} 

しかし:

new AssertProduct(asJsonObject.get("product")).assert(type, name); 

そして:もちろん、私はこのような何かを行うことができますか?

+1

私はあなたのように、それらを分離します'' AssertProduct(asJsonObject.get( "product"))。ofType(x).ofName(y) ' – vikingsteve

+1

IMHOこれは良いアプローチです。 –

+0

@vikingsteve nice。この提案に答えてもらえますか?私は解決されたようにあなたに質問をマークします。 – Dherik

答えて

1

はここBuilderパターンに基づいて、JSONオブジェクトの期待値を主張するための柔軟な方法です:

public class AssertProduct { 

    private JsonElement product; 

    public AssertProduct(JsonElement product) { 
     this.product = product; 
    } 

    public static AssertProduct withProduct(JsonElement product) { 
     return new AssertProduct(product); 
    } 

    AssertProduct ofName(String name) { 
     Assert.assertEquals(name, product.getAsJsonObject().get("name").getAsString()); 
     return this; 
    } 

    AssertProduct ofType(String type) { 
     Assert.assertEquals(type, product.getAsJsonObject().get("type").getAsString()); 
     return this; 
    } 
} 

使用方法は、次のようになります。

AssertProduct.withProduct(checkMe).ofName("some-name").ofType("some-type");