我有一个模型类,有一些属性,我不希望这个类被某些人修改,要么重构属性或添加新属性,那么构建应该失败..
我们有什么办法可以做到这一点吗?我在我的项目中使用 maven、spring boot 和 java 11
需要注意的一点是,重构类的人也可以删除/更改/重构检查属性是否存在的代码。
在这个答案中,我将创建 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
}