java - JUnit 测试应该重叠吗?

标签 java jakarta-ee junit

我做了一项测试,检查问题的答案是否正确添加。我还有一个更新方法测试。但正如您在更新方法中看到的那样,您会看到我在执行测试真正应该执行的操作之前检查是否已添加答案。这是错误的吗?我是否应该假设它有效,因为我已经有添加另一个测试涵盖的答案的情况,或者我应该做出这样的断言?

@Test
public void shouldAddAnswersToQuestion() {
    try {
        addAnswerToQuestion(new Answer("It is 3", false));
        addAnswerToQuestion(new Answer("It is 4", true));
        addAnswerToQuestion(new Answer("It is 5", false));
        addAnswerToQuestion(new Answer("It is 6", false));

        assertEquals(4, question.getAnswers().size());
    } catch (MultipleAnswersAreCorrectException e) {
        e.printStackTrace();
    }
}


@Test
public void shouldUpdateAnswerInQuestion() {
    try {
        Answer answer = new Answer("It is 4", true);
        addAnswerToQuestion(answer);

        Answer answerFromList = null;

        answerFromList = question.getAnswers().get(0);
        assertEquals(answer, answerFromList);

        answer.setDescription("It is now 5 instead of 4");
        question.updateAnswer(answer);

        answerFromList = question.getAnswers().get(0);
        assertEquals(answer, answerFromList);
    } catch (MultipleAnswersAreCorrectException e) {
        e.printStackTrace();
    }
}

最佳答案

测试应该只断言一小部分可观察的行为。测试偶然涉及的其他行为通常应该被认为是正确的,因为我们在其他地方测试它们。

“一点可观察的行为”并不意味着您应该只有一个断言,而是您应该只对一个“事物”或一个“行为单元”进行断言,以获取事物或行为的某些值。

如果我编写了 shouldUpdateAnswerInQuestion 测试,那么我就不会添加第一个断言。

关于java - JUnit 测试应该重叠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353478/

相关文章:

java - 测试包含接口(interface)调用的抽象类的具体方法

java - 如何停止无尽的 EJB 3 计时器?

Java - 什么是原型(prototype)?

java - 如何更改 OAuth2ClientAuthenticationProcessingFilter 的 successHandler?

java - 将大型应用程序从 JavaEE 迁移到 Akka

java - 配置问题: Unable to locate Spring NamespaceHandler for XML schema namespace [http://java. sun.com/xml/ns/javaee]

java - tomcat ExpiresFilter 不起作用

java - 为什么 Tomcat 总是返回 "text/html;"?

jakarta-ee - 使用 CDI 注入(inject)所有相同类型的 bean

java - 并行运行 junit 参数化测试(而不是类)