2017-05-30 57 views
0

声称我有一些测试,取得了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,我需要执行相同的断言来保证预期的结果。

但我试图找到一种方法来重用上面这段代码。很显然,我可以做这样的事情:

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

和:

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()); 
    } 

} 

但是......这是对这类问题的好方法吗?

+1

我将它们分开,所以你可以做'AssertProduct(asJsonObject.get(“product”)).ofType(x).ofName(y)' – vikingsteve

+1

恕我直言,这是一个很好的方法。 –

+0

@vikingsteve不错。你愿意对这个建议做出回答吗?我会把你的问题标记为已解决。 – Dherik

回答

1

这里的断言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");