unit-testing - 在测试类中,在断言中使用主题类的常量是个好主意吗?

标签 unit-testing testing language-agnostic constants

<分区>

在断言中使用主题类的常量是否被认为是不好的做法?

@Test
public void testSubjectMethod() throws Exception {
    Subject subject = new Subject()

    String result = subject.subjectMethod();

    Assert.assertEquals(result, Subject.VALUE);
}

或者我应该在测试类中维护一个单独的值并使用它吗?

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);
}

最佳答案

是的,在测试中使用主题类常量,原因有二:

  • 在整个测试过程中使用一个常量可以确保,如果您更改常量的值,您会在所有地方更改它。相反,如果您在每个测试中复制该值,您可能只更新一次出现的值而不更新另一次出现的值,这可能导致未更新的测试在不应该通过的情况下通过,然后您就会遇到错误。这种考虑实际上只要求你在整个测试中使用相同的常量,而不是在你的测试和主题类中使用相同的常量,但如果你在主题类中有常量,你也可以在测试中使用它。

  • 常量清楚地表明该值对程序及其使用方式很重要。命名常量的方式要明确它们在测试中的角色,而不仅仅是它们在实现中的角色。在测试中使用它们会给命名带来积极的压力。

但是,

  • 不要在测试中只使用任何类的常量:主题类可能使用另一个类的常量,并且您可能需要在测试类中使用该常量的值学科类。但是,如果没有其他理由在您的测试中引用其他类,请不要仅仅为了常量而这样做;这将不必要地耦合测试和实现。如果您不想引用的类具有您不想复制的有意义的常量,请将其移至您不介意引用的类(可能是测试主题)或新的仅常量类并从那里使用它。

  • 不要在测试中使用提供主题类行为的复杂部分的常量。这样做会使测试只是实现的一个副本,从而降低了测试的能力。例如,在测试中使用主题类中使用的正则表达式常量可能不是一个好主意。相反,编写测试表明该类使用正确的输入做正确的事情,并且如果您重写该类以不使用正则表达式,它仍然会通过。

关于unit-testing - 在测试类中,在断言中使用主题类的常量是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724520/

相关文章:

unit-testing - 如何设计用于生成 PDF 文档的单元测试?

language-agnostic - 规划问题的递归解决方案的最佳方法是什么?

最小化大负载数量的算法

python-3.x - 对使用上下文管理器的方法进行单元测试

ios - 如何在 Swift 中为协议(protocol)编写单元测试

unit-testing - 对 Mock Object 的期望似乎没有得到满足(Moq)

unit-testing - 如何测试枚举类型?

selenium - 机器人框架 - Selenium2Library - IE11 非常不稳定,无法完成测试

java - 寻找一本涵盖单元、功能、集成和场景测试的综合 Java 测试书籍

iphone - 如何使用核心数据进行单元测试?