我通常会尽量避免重复并遵守DRY原则.但是,我想知道这样的情况:
public class Feature { final static String FEATURE_LABEL = "blah"; public void doSomething() { ... } ... } public class FeatureTest { ... @Test public void doSomethingShouldMakeSomethingHappen() { assertEquals(Feature.FEATURE_LABEL, feature.getSomethingHappens().getLabel()); }
如果要求标签是"blah"并且某人将FEATURE_LABEL更改为"bleh",则即使测试不再符合要求,测试也会通过.这是否是违反DRY的有效地方?
是的,在这里使用文字.
引用自己的文字问题:
硬编码文字应该出现在测试值的单元测试中,除非在单个测试类中重复使用一个局部常量有用的值.
单元测试是对期望值的描述,没有任何抽象或重定向.想象一下你自己在阅读测试 - 你希望信息完全在你面前.
为了测试某些东西 - 任何东西 - 一个重要的考虑因素是你的测试条件与你正在测试的东西无关.否则,您的测试没有单一,可靠的含义; 每当被检查对象发生变化时,它们就会变成其他测试.
不是一件好事.
同样的想法适用于单元测试.在上面的上下文中,您正在测试的字符串应该完全独立于测试类中的内容.换句话说,是的,你可以而且应该违反DRY原则.