Java 测试IllegalArgumentException未按预期捕获

Java 测试IllegalArgumentException未按预期捕获,java,exception,junit,illegalargumentexception,Java,Exception,Junit,Illegalargumentexception,我有以下测试代码: @Test(expected = IllegalArgumentException.class) public void addPlayerFailureTest() { playerDAO.addPlayer(null); } 这段代码应该返回一个IllegalArgumentException,并按预期执行。但是,它会将测试变为红色。这是stacktrace: ERROR addPlayer, Player failure: java.lang.Ill

我有以下测试代码:

@Test(expected = IllegalArgumentException.class)
public void addPlayerFailureTest()    {
    playerDAO.addPlayer(null);
}
这段代码应该返回一个
IllegalArgumentException
,并按预期执行。但是,它会将测试变为红色。这是stacktrace:

ERROR  addPlayer, Player failure: 
java.lang.IllegalArgumentException: attempt to create merge event with null entity
    at org.hibernate.event.MergeEvent.<init>(MergeEvent.java:60)
    at org.hibernate.event.MergeEvent.<init>(MergeEvent.java:43)
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:688)
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:692)
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
    at com.sun.proxy.$Proxy32.merge(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
    at com.sun.proxy.$Proxy32.merge(Unknown Source)
    at fr.game.core.dao.AbstractJpaGenericDAO.update(AbstractJpaGenericDAO.java:58)
    at fr.game.core.dao.player.JPAJoueurDAO.addJoueur(JPAJoueurDAO.java:40)
    at fr.game.core.dao.player.JoueurDAOTest.addJoueurFailureTest(JoueurDAOTest.java:23)

它以前可能会被检测到(在本例中,我们不会到达
返回false
),但我从以前的开发人员那里取回一些旧代码,从而为这个特定的用例编写测试用例。

您在
addPlayer()中捕获了
IllegalArgumentException
(它是
异常的子类型)
方法。它从未达到测试方法。
您看到的不是测试方法引发的实际异常,而是
log.error(“Player failure:,e”)的控制台输出

“ERROR addPlayer,Player failure”此消息来自何处?是否有委托方法捕获异常,并将其丢弃或包装到其他类型的异常中?发布addPlayer()方法的代码。“ERROR addPlayer”来自Hibernate,“Player failure”是一条自定义消息。我将发布代码。这个故事的寓意是永远不会捕获(例外e)
它总是不正确的!嗯,我正在学习:)。我自己一步一步地掌握漂亮的设计和写得很好的代码是非常粗糙的。我真傻。当然初学者的错误。谢谢你的敏锐。
public boolean addPlayer(Player player) {
    try {
        update(player);
        return true;
    } catch (Exception e) {
        log.error("Player failure : ", e);
        return false;
    }
}