错误java.lang.AssertionError:expected:null <null>但是:java.lang.String <null>是什么意思?

时间:2015-12-11 12:32:28

标签: java spring hibernate junit

我在Junit 4.12测试代码中遇到了这个奇怪的问题。该应用程序使用Spring Framework 4.1.6和Hibernate 4.当比较来自不同数据库的两个bean时,我得到了这个错误

java.lang.AssertionError: expected: null<null> but was: java.lang.String<null>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)
    at my.test.TestClass.method(TestClass.java:105)

这是什么意思?如何解决?

我的测试类使用SpringJUnit4ClassRunner运行,看起来与此类似

@ContextConfiguration(
    {
        "classpath:beans-test.xml"
    }
)
@RunWith(SpringJUnit4ClassRunner.class)
public class TestMdtTechnicalGridGeneration extends AbstractJUnit4SpringContextTests {

    @Test
    public void method() {
            assertEquals(bean1.getThing(), bean2.getThing());
    }
}

编辑:我所指的bean是一个简单的POJO,您可以想象它如下所示:

public class Thing {
    private String thing;

    public void setThing(String thing) {
        this.thing = thing;
    }

    public String getThing() {
        return thing;
    }
}

我按照

的方式使用Hibernate
SessionFactory mySF = (SessionFactory) applicationContext.getBean("mySessionFactory");
Query query = mySF.openSession().createQuery("FROM Thing WHERE code = '" + code + "'");
List<Thing> listThing = return query.list();
bean1 = listThing.get(0);

解决关闭投票: 我不确定所有这些细节是否有帮助,问题是关于我得到的奇怪的AssertError而不是我如何获得bean。我无法在SO或谷歌找到帮助。

edit2 :进一步说明,POJO本身就是完全相同的Java类,我使用了两个hibernate映射文件。唯一的区别是映射中的catalog="this"catalog="that"。我使用两个不同的sessionfactories,因为数据存储在不同的模式(aka目录)中,相同的MySQL实例。

5 个答案:

答案 0 :(得分:2)

这看起来像是JUnit的4.12版本的问题。 An issue was opened with JUnit on github现已修复。因此,解决方法是降级到4.11或采用最新版本的JUnit。

答案 1 :(得分:2)

经过多次挖掘后,我发现bean 不是相同。常规DAO在Thing上设置字符串值为null ,而测试数据DAO在Thing上设置 null 。失败的断言是

@Test
public void testNull() {
    assertEquals(null, "null");
}

我很高兴失败,价值 不同。但详细信息非常隐秘。

答案 2 :(得分:2)

我遇到了类似的问题并通过使用String.valueOf(Your Value Here)包装值来解决它,例如将String.valueOf( “空”)

答案 3 :(得分:0)

我发现correct answer令人困惑,让我觉得GreenDAO存储grammar Fetal; transaction : begin statements end; begin : 'begin' ; end : 'end' ; statements : (statement)+ ; statement : declaration ';' | command ';' | assignment ';' | evaluation | ';' ; declaration : type var; var returns : identifier; type returns : DecimalType | NumberType | StringType | BooleanType | DateType | ObjectType | DaoType ; assignment : lharg Equals rharg | lharg unaryOP rharg ; assignmentOp : Equals ; unaryOP : PlusEquals | MinusEquals | MultiplyEquals | DivideEquals | ModuloEquals | ExponentEquals ; expressionOp : arithExpressOp | bitwiseExpressOp ; arithExpressOp : Multiply | Divide | Plus | Minus | Modulo | Exponent ; bitwiseExpressOp : And | Or | Not ; comparisonOp : IsEqualTo | IsLessThan | IsLessThanOrEqualTo | IsGreaterThan | IsGreaterThanOrEqualTo | IsNotEqualTo ; logicExpressOp : AndExpression | OrExpression | ExclusiveOrExpression ; rharg returns : rharg expressionOp rharg | '(' rharg expressionOp rharg ')' | var | literal | assignmentCommands ; lharg returns : var; identifier : Identifier; evaluation : IfStatement '(' evalExpression ')' block (Else block)?; block : OpenBracket statements CloseBracket; evalExpression : evalExpression logicExpressOp evalExpression | '(' evalExpression logicExpressOp evalExpression ')' | eval | '(' eval ')' ; eval : rharg comparisonOp rharg ; assignmentCommands : GetBalance '(' stringArg ')' | GetVariableType '(' var ')' | GetDescription | Today | GetDays '(' startPeriod=dateArg ',' endPeriod=dateArg ')' | DayOfTheWeek '(' dateArg ')' | GetCalendarDay '(' dateArg ')' | GetMonth '(' dateArg ')' | GetYear '(' dateArg ')' | Import '(' stringArg ')' /* Import( path ) */ | Lookup '(' sql=stringArg ',' argumentList ')' /* Lookup( table, SQL) */ | List '(' sql=stringArg ',' argumentList ')' /* List( table, SQL) */ | invocation ; command : Print '(' rharg ')' | Credit '(' amtArg ',' stringArg ')' | Debit '(' amtArg ',' stringArg ')' | Ledger '(' debitOrCredit ',' amtArg ',' acc=stringArg ',' desc=stringArg ')' | Alias '(' account=stringArg ',' name=stringArg ')' | MapFile ':' stringArg | invocation | Update '(' sql=stringArg ',' argumentList ')' ; invocation : o=objectLiteral '.' m=identifier '('argumentList? ')' | o=objectLiteral '.' m=identifier '()' ; argumentList : rharg (',' rharg )* ; amtArg : rharg ; stringArg : rharg ; numberArg : rharg ; dateArg : rharg ; debitOrCredit : charLiteral ; literal : numericLiteral | doubleLiteral | booleanLiteral | percentLiteral | stringLiteral | dateLiteral ; fileName : '<' fn=Identifier ('.' ft=Identifier)? '>' ; charLiteral : ('D' | 'C'); numericLiteral : Number ; doubleLiteral : Decimal ; percentLiteral : Percentage ; booleanLiteral : Boolean ; stringLiteral : String ; dateLiteral : Date ; objectLiteral : Identifier ; daoLiteral : Identifier ; //Below are Token definitions // Data Types DecimalType : 'decimal' ; NumberType : 'number' ; StringType : 'string' ; BooleanType : 'boolean' ; DateType : 'date' ; ObjectType : 'object' ; DaoType : 'dao' ; /****************************************************************** * Assignmnt operator ******************************************************************/ Equals : '=' ; /***************************************************************** * Unary operators *****************************************************************/ PlusEquals : '+=' ; MinusEquals : '-=' ; MultiplyEquals : '*=' ; DivideEquals : '/=' ; ModuloEquals : '%=' ; ExponentEquals : '^=' ; /***************************************************************** * Binary operators *****************************************************************/ Plus : '+' ; Minus : '-' ; Multiply : '*' ; Divide : '/' ; Modulo : '%' ; Exponent : '^' ; /*************************************************************** * Bitwise operators ***************************************************************/ And : '&' ; Or : '|' ; Not : '!' ; /************************************************************* * Compariso operators *************************************************************/ IsEqualTo : '==' ; IsLessThan : '<' ; IsLessThanOrEqualTo : '<=' ; IsGreaterThan : '>' ; IsGreaterThanOrEqualTo : '>=' ; IsNotEqualTo : '!=' ; /************************************************************* * Expression operators *************************************************************/ AndExpression : '&&' ; OrExpression : '||' ; ExclusiveOrExpression : '^^' ; // Reserve words (Assignment Commands) GetBalance : 'getBalance'; GetVariableType : 'getVariableType' ; GetDescription : 'getDescription' ; Today : 'today'; GetDays : 'getDays' ; DayOfTheWeek : 'dayOfTheWeek' ; GetCalendarDay : 'getCalendarDay' ; GetMonth : 'getMonth' ; GetYear : 'getYear' ; Import : 'import' ; Lookup : 'lookup' ; List : 'list' ; // Reserve words (Commands) Credit : 'credit'; Debit : 'debit'; Ledger : 'ledger'; Alias : 'alias' ; MapFile : 'mapFile' ; Update : 'update' ; Print : 'print'; IfStatement : 'if'; Else : 'else'; OpenBracket : '{'; CloseBracket : '}'; Percentage : (Sign)? Digit+ (Dot Digit+)? '%' ; Boolean : 'true' | 'false'; Number : Sign? Digit+; Decimal : Sign? Digit+ Dot Digit*; Date : Year '-' Month '-' Day; Identifier : IdentifierNondigit ( IdentifierNondigit | Digit )* ; String: '"' ( ESC | ~[\\"] )* '"'; /************************************************************ * Fragment Definitions ************************************************************/ fragment ESC : '\\' [abtnfrv"'\\] ; fragment IdentifierNondigit : Nondigit //| // other implementation-defined characters... ; fragment Nondigit : [a-zA-Z_] ; fragment Digit : [0-9] ; fragment Sign : Plus | Minus; fragment Digits : [-+]?[0-9]+ ; fragment Year : Digit Digit Digit Digit; fragment Month : Digit Digit; fragment Day : Digit Digit; fragment Dot : '.'; fragment SCharSequence : SChar+ ; fragment SChar : ~["\\\r\n] | SimpleEscapeSequence | '\\\n' // Added line | '\\\r\n' // Added line ; fragment CChar : ~['\\\r\n] | SimpleEscapeSequence ; fragment SimpleEscapeSequence : '\\' ['"?abfnrtv\\] ; ExtendedAscii : [\x80-\xfe]+ -> skip ; Whitespace : [ \t]+ -> skip ; Newline : ( '\r' '\n'? | '\n' ) -> skip ; BlockComment : '/*' .*? '*/' -> skip ; LineComment : '//' ~[\r\n]* -> skip ; 和`null&#34;之间存在一些复杂的区别,让我觉得我需要将JUnit升级为版本5,但幸运的是我发现了答案的真正含义,即:

此错误仅表示您正在比较String yourString = null和不相等的字符串null。就我而言,当我打算存储"null"时,我正在将"null"存储在GreenDAO中。

答案 4 :(得分:0)

请尝试以下TestMethod

@Test
public void testNull() {
assertEquals(null, "");
}