Java 11:有什么方法可以强制 Maven 构建不添加或修改模型类

问题描述 投票:0回答:1

我有一个模型类,有一些属性,我不希望这个类被某些人修改,要么重构属性或添加新属性,那么构建应该失败..

我们有什么办法可以做到这一点吗?我在我的项目中使用 maven、spring boot 和 java 11

java spring maven-plugin
1个回答
0
投票

需要注意的一点是,重构类的人也可以删除/更改/重构检查属性是否存在的代码。

在这个答案中,我将创建 JUnit 测试来检查属性。

它假定以下类:

class SomeClass{
    private String someProperty;
    public String getSomeProperty(){
        return someProperty;
    }
    public void setProperty(String someProperty){
        this.someProperty = someProperty;
    }
}

只需访问它

您的测试可以只访问该属性并检查它是否有效。

@Test
public void checkSomeProperty(){
    SomeClass o = new SomeClass();
    assertEquals(YOUR_EXPECTED_DEFAULT_VALUE, o.getSomeProperty());
    o.setSomeProperty("something else");
    assertEquals("something else", o.getSomeProperty());
}

但是,请注意,重构工具也可能会重构该测试(例如,更改测试中属性的名称)。

反思

如果你不想让重构工具轻易地捡起你的支票,你可以使用反射来检查它的存在。

@Test
public void checkSomePropertyWithReflection() throws NoSuchFieldException, NoSuchMethodException {
    Field field = SomeClass.class.getDeclaredField("someProperty");
    assertEquals(String.class, field.getType());
    Method getter = SomeClass.class.getDeclaredMethod("getSomeProperty");
    assertEquals(String.class, getter.getReturnType());
    Method setter = SomeClass.class.getDeclaredMethod("setSomeProperty", String.class);
    assertEquals(void.class, setter.getReturnType());
    //maybe further checks
} 
© www.soinside.com 2019 - 2024. All rights reserved.