如何对具有多个布尔字段的类进行单元测试

时间:2018-03-28 13:18:56

标签: java junit4

对不起,如果这是一个愚蠢的问题。我想对以下课程进行单元测试(课程还有更多内容,但我将其删除以说明我的问题)。

该类由多个在构造函数中赋值的布尔字段组成。

当我进行单元测试时,如何测试参数被分配到正确的类字段,例如ans1 - > mIsOption1Ans?

例如,如果我断言所有类字段都是" true"这不会识别另一个开发人员是否意外地在构造函数中交换了赋值并将参数分配给了错误的类字段。我想测试一下" ans1"总是被分配到" mIsOption1Ans"等等

public class MultipleChoiceQuizAnswer {
   private Boolean mIsOption1Ans,mIsOption2Ans,mIsOption3Ans,mIsOption4Ans;

   public QuizAnswer (Boolean ans1,Boolean ans2, Boolean ans3,Boolean ans4) {
         mIsOption1Ans = ans1;
         mIsOption2Ans = ans2;
         mIsOption3Ans = ans3;
         mIsOption4Ans = ans4;
    }
}

2 个答案:

答案 0 :(得分:3)

这是非常明显的事情,但如果你真的想测试它,你可以测试1布尔为true而其余为false的每种情况。

例如:

QuizAnswer firstTrue = QuizAnswer(true, false, false, false);
assertTrue(firstTrue.isFirstAnswer());
// Then for next:
QuizAnswer secondTrue = QuizAnswer(false, true, false, false);
assertTrue(secondTrue.isSecondAnswer());
// Etc. You could also check if all other answers are false

答案 1 :(得分:3)

您的字段是对象的内部状态。你应该只测试班级'对外界的行为。字段'值会导致QuizAnswer的某些外部行为,应该对其进行测试。例如。如果你有一个方法来检查选项是否是答案:

@Test
public void first_option_is_the_answer_when_ans1_flag_is_true() {
    QuizAnswer answer = new QuizAnswer(true, false, false, false);
    boolean firstOptionIsAnswer = answer.isNthOptionTheAnswer(1);
    assertTrue(firstOptionIsAnswer);
}

你可能会看看JUnit's Parameterized亚军,因为你可能想要编写数据驱动的测试。