我有一些测试在JsonObject中为不同的端点返回了断言,如下所示:
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());
}
}
但是......对于这类问题,这是一个很好的方法吗?
答案 0 :(得分: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");