似乎当两个f.isColored() && fm.isColored()
在一起时,该方法返回false,但如果我单独使用它们,则该方法返回true。
此方法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
}
答案 0 :(得分:0)
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);
当您将zero元素fm添加到familyMemberList
时所以在你的代码中是:
when(fm.isColored())。thenReturn(false); - 第一次调用返回false 当(fm.isColored())thenReturn(真)。 - 对于第二次调用返回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&amp;&amp; f.isColored()&amp;&amp; fm.isColored()) - &gt;(f.isColored()&amp;&amp; fm.isColored())
if(true&amp;&amp; false&amp;&amp; fm.isColored()) - &gt; if(!fm.isColored())
if(true&amp;&amp; f.isColored()&amp;&amp; true) - &gt; if(f.isColored())