【问题标题】:How to unit test a class with multiple boolean fields如何对具有多个布尔字段的类进行单元测试
【发布时间】:2018-03-28 13:18:55
【问题描述】:

抱歉,这是一个愚蠢的问题。我想对以下课程进行单元测试(该课程还有更多内容,但我将其剥离以说明我的问题)。

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

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

例如,如果我断言所有类字段都是“真”,这将无法识别其他开发人员是否意外交换了构造函数中的赋值并将参数分配给错误的类字段。我想测试一下“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;
    }
}

【问题讨论】:

  • 您可以使用反射来检查私有字段的值。或者使用访问器(getter)
  • 创建并读取,测试它们中的每一个:ans1,2,3,4 = 1,0,0,0 => 预期读取:1,0,0,0,然后是 1,2, 3,4 = 0,1,0,0 => 预期 0,1,0,0 ...然后是 0010,然后是 0001。如果所有这些都成功,您已经测试过每个 ansn 都被断言到相应的 mIsOption 和 只有那个。
  • 感谢 Fildor 好主意,这就是我试图解决的问题
  • 你有这些领域的吸气剂吗?
  • 访问私有变量不是问题。我试图测试布尔参数的正确分配,菲尔多的回答解决了我的问题。非常感谢

标签: java junit4


【解决方案1】:

这是非常明显的事情,但如果你真的想测试它,你可以测试每一种情况,其中 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

【讨论】:

    【解决方案2】:

    您的字段是对象的内部状态。您应该只测试班级对外界的行为。这些字段的值会导致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 runner,因为你可能想写数据驱动的测试。

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2018-02-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      相关资源
      最近更新 更多