作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
存在一个枚举类,如果在没有对下游项目进行更改的情况下对其进行更改,则会导致下游出现问题。不幸的是,仅通过搜索枚举的用法并不能轻易识别出这一点。我们在代码中有很大的警告评论说“不要在不改变(下游项目)的情况下改变它”,但显然这还不够:墨菲定律成立。我需要一些其他方法来防止其他开发人员(或 future 的我)破坏东西。
我目前的方法是创建一个单元测试,每当更改枚举时都会抛出错误。因此,更改枚举将导致构建失败,这应该引起开发人员的注意。失败消息中将包含有关如何安全更新枚举的说明。不幸的是,除了将整个枚举复制到测试类中,然后将测试枚举中的每个值与实际枚举进行比较之外,我看不到任何编写此单元测试的方法。
有没有一种方法可以避免在此处的测试类中重复枚举?根据我的描述,是否有您认为我应该遵循的最佳实践?
最佳答案
如果您想要验证的只是枚举成员名称以及它们的顺序,那么您可以在枚举类型上创建一个静态方法来计算该信息的摘要形式。然后,您的单元测试可以调用单个方法来测试枚举是否与预期形式匹配。
例如,
enum Test {
T1;
static int computeSignature() {
StringBuilder sb = new StringBuilder();
for (Test t : values) {
sb.append(t.name()).append(';');
}
return sb.toString().hashCode();
}
}
// ...
private final static int EXPECTED_ENUM_SIG = /* some number */;
@Test
public void testEnumSignature() {
assertEquals("enum Test has been unexpectedly changed", EXPECTED_ENUM_SIG,
Test.computeSignature());
}
如果您决定不关心枚举顺序,则将名称排序作为签名计算的一部分。
关于java - 有没有办法断言枚举自上次修订以来没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701285/
我是一名优秀的程序员,十分优秀!