Java Mockito:AssertionError期望为True但给出False
似乎当Java Mockito:AssertionError期望为True但给出False,java,junit,boolean,mockito,Java,Junit,Boolean,Mockito,似乎当f.isColored()&&fm.isColored()两者同时存在时,该方法返回false,但如果我单独使用它们,该方法将正确返回true 此方法0未通过测试 @Override public boolean colorConstraint(ActionSpace as, FamilyMember fm) { for (FamilyMember f : as.getFamilyMembers()) { if (true &&am
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
}
@测试
公共无效中立民和Sameowner(){
//给定
列出家庭成员列表;
familyMemberList=Arrays.asList(fm);
当(as.getFamilyMembers())。然后返回(familyMemberList);
/*使用方法1时会对此进行注释*/
//行动空间中的家庭成员是中立的
当(familyMemberList.get(0.isColored())。然后返回(false);
/*使用方法2时会对此进行注释*/
//要放置的fm是彩色的
当(fm.isColored())。然后返回(true);
//什么时候
布尔布尔;
bool=harvestProductionASController.colorConstraint(as,fm);
//然后
assertTrue(bool);//使用方法0时的断言错误
}
将作为零元素fm添加到familyMemberList时
因此,在您的代码中:
when(fm.isColored())。然后返回(false)--对于第一次调用,返回false
当(fm.isColored())。然后返回(true)--对于第二个调用,返回true
fm-这是模拟对象,因为模拟对象mockito的工作原理类似于:如果第一次调用方法,则返回X;如果第二次调用方法,则返回Y。。。。。
这是你的情况,你应用了这种行为
在方法colorConstraint
中,您必须检查:
if (f.isColored() && fm.isColored()) //this does not work
return false;
f、 isColored()的值为-false
fm.isColored()的结果为-true
所以对于你们的测试,这个方法的结果是错误的
修正:(不要使用相同的对象)
列出家族成员列表;
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())
如果(true&&f.isColored()&&true)->如果(f.isColored())那么您应该进行一些调试。如果在那之后您仍然被卡住,那么请创建一个。您确定:
我不明白为什么:如果(4==4&&FALSE&&TRUE)返回FALSE
??仅当所有参数均为TRUE时,才会返回TRUE;这是&
而不是
。更新了问题
when(fm.isColored()).thenReturn(false);
if (f.isColored() && fm.isColored()) //this does not work
return false;
List<FamilyMember> familyMemberList;
FamilyMember fmNew= new ();
familyMemberList = Arrays.asList(fmNew);