在测试 class 中,在断言中使用主题 class 的常量是个好主意吗?
Is it a good idea in a test class to use constants of the subject class in assertions?
在断言中使用主题 class 的常量是否被认为是不好的做法?
@Test
public void testSubjectMethod() throws Exception {
Subject subject = new Subject()
String result = subject.subjectMethod();
Assert.assertEquals(result, Subject.VALUE);
}
或者我应该在测试中维护一个单独的值 class 并使用它吗?
private static final String SUBJECT_VALUE = "SUBJECT_VALUE";
@Test
public void testSubjectMethod() throws Exception {
Subject subject = new Subject()
String result = subject.subjectMethod();
Assert.assertEquals(result, SUBJECT_VALUE);
}
是的,在测试中使用主题 class 常量,原因有二:
在整个测试过程中使用一个常量可以确保,如果您更改常量的值,您会在所有地方更改它。相反,如果您在每个测试中复制该值,您可能只更新一次出现的值而不更新另一次出现的值,这可能导致未更新的测试在不应该通过的情况下通过,然后您就会遇到错误。这种考虑实际上只要求你在整个测试中使用相同的常量,而不是在你的测试和主题 classes 中使用相同的常量,但是如果你在主题 class 中使用相同的常量,你也可以在测试中使用它。
常量清楚地表明该值对程序及其使用方式很重要。命名常量的方式要明确它们在测试中的角色,而不仅仅是它们在实现中的角色。在测试中使用它们会给命名带来积极的压力。
然而,
不要在测试中使用任何 class 的常量:主题 class 可能会使用另一个常量class,您可能需要在主题 class 的测试中使用该常量的值。但是,如果没有其他理由在您的测试中引用其他 class,请不要仅仅为了常量而这样做;这将不必要地耦合测试和实施。如果您不想引用的 class 有一个您不想重复的有意义的常量,请将其移动到您不介意引用的 class (也许是主题测试)或一个新的常量 class 并从那里使用它。
不要在测试中使用提供主题class行为的复杂部分的常量。这样做会使测试只是实现的一个副本,从而降低了测试的能力。例如,在测试中使用主题 class 中使用的正则表达式常量可能是个坏主意。相反,编写测试表明 class 用正确的输入做正确的事情,如果你重写 class 不使用正则表达式,它仍然会通过。
在断言中使用主题 class 的常量是否被认为是不好的做法?
@Test
public void testSubjectMethod() throws Exception {
Subject subject = new Subject()
String result = subject.subjectMethod();
Assert.assertEquals(result, Subject.VALUE);
}
或者我应该在测试中维护一个单独的值 class 并使用它吗?
private static final String SUBJECT_VALUE = "SUBJECT_VALUE";
@Test
public void testSubjectMethod() throws Exception {
Subject subject = new Subject()
String result = subject.subjectMethod();
Assert.assertEquals(result, SUBJECT_VALUE);
}
是的,在测试中使用主题 class 常量,原因有二:
在整个测试过程中使用一个常量可以确保,如果您更改常量的值,您会在所有地方更改它。相反,如果您在每个测试中复制该值,您可能只更新一次出现的值而不更新另一次出现的值,这可能导致未更新的测试在不应该通过的情况下通过,然后您就会遇到错误。这种考虑实际上只要求你在整个测试中使用相同的常量,而不是在你的测试和主题 classes 中使用相同的常量,但是如果你在主题 class 中使用相同的常量,你也可以在测试中使用它。
常量清楚地表明该值对程序及其使用方式很重要。命名常量的方式要明确它们在测试中的角色,而不仅仅是它们在实现中的角色。在测试中使用它们会给命名带来积极的压力。
然而,
不要在测试中使用任何 class 的常量:主题 class 可能会使用另一个常量class,您可能需要在主题 class 的测试中使用该常量的值。但是,如果没有其他理由在您的测试中引用其他 class,请不要仅仅为了常量而这样做;这将不必要地耦合测试和实施。如果您不想引用的 class 有一个您不想重复的有意义的常量,请将其移动到您不介意引用的 class (也许是主题测试)或一个新的常量 class 并从那里使用它。
不要在测试中使用提供主题class行为的复杂部分的常量。这样做会使测试只是实现的一个副本,从而降低了测试的能力。例如,在测试中使用主题 class 中使用的正则表达式常量可能是个坏主意。相反,编写测试表明 class 用正确的输入做正确的事情,如果你重写 class 不使用正则表达式,它仍然会通过。