重用Junit在不同的类中断言

时间:2017-05-30 13:12:47

标签: java junit reusability

我有一些测试在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());
    }

}

但是......对于这类问题,这是一个很好的方法吗?

1 个答案:

答案 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");