字符串条件检查测试失败

String condition check failing for test

我有一个验证石斑鱼字符串的方法:

public String validateGrouper(String grouper)
    {
        if(grouper!=null)
            grouper = grouper.trim();
        if(grouper==null || grouper.equals("") || !grouper.equalsIgnoreCase("AND") || !grouper.equalsIgnoreCase("OR"))
        {
            System.out.println("Trap for grouper validation triggered with grouper: "+grouper);
            grouper="AND";
        }
        else
            grouper = grouper.toUpperCase();
        return grouper;
    }

我运行反对这个测试:

@Test
public void testValidateGrouper(){
    DBUtils dbUtils = new DBUtils();
    assertEquals("Expect empty string to be replaced by AND","AND",dbUtils.validateGrouper(""));
    assertEquals("Expect spaced out string to be replaced by AND","AND",dbUtils.validateGrouper("   "));
    assertEquals("Expect the lower case and to be used as AND","AND",dbUtils.validateGrouper("and"));
    assertEquals("Expect the upper case AND to be used as AND","AND",dbUtils.validateGrouper("AND"));
    assertEquals("Expect the word CART to be ignored and replaced by AND","AND",dbUtils.validateGrouper("CART"));
    assertEquals("Expect AND to be used as the grouper if no grouper is provided","AND",dbUtils.validateGrouper(null));
    assertEquals("Expect the lower case or to be used as OR","OR",dbUtils.validateGrouper("or"));
    assertEquals("Expect the upper case OR to be used as OR","OR",dbUtils.validateGrouper("OR"));
}

我发现尽管使用 ANDOR,条件总是会被触发。我不明白为什么条件失败。

如果允许使用 AND 或 OR,您需要

if(grouper==null || !(grouper.equalsIgnoreCase("AND") || grouper.equalsIgnoreCase("OR")))

否则,如果grouper为"OR",则不等于"AND"且条件为真,如果grouper为"AND",则不等于"OR"并且条件为真。

此外,您可以删除 grouper.equals("") 检查。