【问题标题】:Mockito : AssertionError expecting True but gives FalseMockito:AssertionError 期待 True 但给出 False
【发布时间】:2017-07-09 14:51:41
【问题描述】:

似乎当两个f.isColored() && fm.isColored() 在一起时,该方法返回false,但如果我分别使用它们,该方法返回正确。

这个方法0没有通过测试

 @Override
    public boolean colorConstraint(ActionSpace as, FamilyMember fm) {
        for (FamilyMember f : as.getFamilyMembers()) {
            if (true && f.isColored() && fm.isColored()) //this does not work
                return false;
        }
        return true;
    }

使用此方法测试通过 1

@Override
    public boolean colorConstraint(ActionSpace as, FamilyMember fm) {
        for (FamilyMember f : as.getFamilyMembers()) {
            if (true && false && fm.isColored())
                return false;
        }
        return true;
    }

使用此方法测试通过 2

@Override
public boolean colorConstraint(ActionSpace as, FamilyMember fm) {
    for (FamilyMember f : as.getFamilyMembers()) {
        if (true && f.isColored() && true)
            return false;
    }
    return true;
}

测试方法

 @Test
    public void neutralFMInASAndSameOwner() {
        //given
        List<FamilyMember> familyMemberList;
        familyMemberList = Arrays.asList(fm);
        when(as.getFamilyMembers()).thenReturn(familyMemberList);

/*this is commented when using method 1 */
        //family member in action space is neutral
        when(familyMemberList.get(0).isColored()).thenReturn(false);

/*this is commented when using method 2 */
        //fm to place is colored
        when(fm.isColored()).thenReturn(true);
        //when
        Boolean bool;
        bool = harvestProductionASController.colorConstraint(as, fm);
        //then
        assertTrue(bool); //AssertionError when using method 0
    }

【问题讨论】:

  • 那你应该做一些调试。如果你在那之后仍然卡住,那么请创建一个minimal test-case。
  • 你确定:I don't understand why: IF( 4 == 4 &amp;&amp; FALSE &amp;&amp; TRUE) is returning FALSE??只有当所有参数都为 TRUE 时才会返回 TRUE;这是&amp; 不是|。
  • 更新问题

标签: java junit boolean mockito


【解决方案1】:
 List<FamilyMember> familyMemberList;
 familyMemberList = Arrays.asList(fm);
 when(as.getFamilyMembers()).thenReturn(familyMemberList);

/*this is commented when using method 1 */
 //family member in action space is neutral
 when(familyMemberList.get(0).isColored()).thenReturn(false);

where is familyMemberList.get(0)是fm,和

when(fm.isColored()).thenReturn(false);

当您将 fm 作为零元素添加到 familyMemberList 中时

所以在你的代码中是:

when(fm.isColored()).thenReturn(false);--第一次调用return false 当(fm.isColored()).thenReturn(true); --第二次调用返回true

fm - 它是模拟对象,对于模拟对象,mockito 可以像这样工作:如果第一次调用方法则返回 X,如果第二次调用方法则返回 Y..... 你的情况是你应用了这种行为。

在方法colorConstraint你有检查:

if (f.isColored() && fm.isColored()) //this does not work
   return false;

f.isColored() 有值 - false fm.isColored() 有结果 - true

所以这个方法的结果,对于你的测试,是假的。

修复:(不要使用相同的对象)

 List<FamilyMember> familyMemberList;
 FamilyMember fmNew= new ();
 familyMemberList = Arrays.asList(fmNew);

只是备注:

改变 if (true && f.isColored() && fm.isColored()) -->(f.isColored() && fm.isColored())

if (true && false && fm.isColored()) -->if (!fm.isColored())

if (true && f.isColored() && true) -->if (f.isColored())

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多