在不同 类 中重用 Junit 断言

Reuse Junit asserts in different classes

我有一些测试在 JsonObject 中针对不同端点 return 进行了断言,如下所示:

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 代码,对吧?有多个端点 return 相同 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());
    }

}

但是...这是解决此类问题的好方法吗?

下面是一种基于构建器模式断言 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");