0

我有点喜欢 Google 的Truth.dev 库。我在 Java 中有一个大型域模型,并且想在我自己的主题文件中为它们添加几个小的自定义断言。虽然每次都为主题创建样板有点痛苦,但默认情况下我希望有很多明显/直接的断言。

类似于AssertJ 的生成器项目

例如,给定以下简单模型(我的模型要复杂得多):

@lombok.Value
public class Car {
    String name;
    Make make;
    int colourId;

    public enum Make {PLASTIC, METAL}
}

我希望能够在不自己编写任何代码的情况下执行以下操作:

assertThat(car).hasMakeEqualTo(PLASTIC);
assertThat(car).hasColourId().isAtLeast(5);
assertThat(car).hasName().ignoringTrailingWhiteSpace().equalTo("sally");

或者

assertThat(person).hasAddress().hasStreet().ignoringCase().endsWith('Rd')
4

1 回答 1

0

在我发现了可爱的 Google Truth 之后,我立即从 AssertJ 转换过来。但是,我不喜欢充分发挥其潜力所需的样板。我也刚刚找到了 AssertJ 的代码生成器。所以我为 Google Truth 制作了一个。

你可以在它的 GitHub 页面上找到关于它的所有信息。

使用 Truth 的所述问题中的断言的断言失败如下所示:

    assertThat(car).hasName().ignoringTrailingWhiteSpace().equalTo("sally");

value of: car.getName().
expected: sally
but was : yuYU3KZU3c
car was : Car(name=yuYU3KZU3c, make=METAL, colourId=420434249)

        assertThat(car).hasMakeEqualTo(PLASTIC);

expected Make to be equal to: PLASTIC
but was                     : Car(name=7lvPSNeMJj, make=PLASTIC, colourId=1732244871)

        assertThat(car).hasColourId().isAtLeast(8);

value of               : car.getColourId()
expected to be at least: 8
but was                : 5
car was                : Car(name=oYZIeRofZn, make=PLASTIC, colourId=5)

要实现上述目标,您只需将其添加到您的构建中。

<plugin>
    <groupId>io.stubbs.truth</groupId>
    <artifactId>truth-generator-maven-plugin</artifactId>
    <configuration>
        <classes>
            <param>io.stubbs.truth.generator.example.Car</param>
        </classes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

它非常强大和灵活。非常渴望获得反馈并实施更多想法。

于 2021-11-10T18:31:39.933 回答