在JUnit中创建assertClass()方法

Mik*_*ike 3 java junit

我正在为基于Apache MINA的协议项目创建一个测试平台.在MINA中,当您收到数据包时,该messageReceived()方法将获取一个Object.理想情况下,我想使用JUnit方法assertClass(),但它不存在.我正在努力找出最接近的东西.我试图找到类似的东西instanceof.

目前我有:

public void assertClass(String msg, Class expected, Object given) {  
    if(!expected.isInstance(given)) Assert.fail(msg);  
}
Run Code Online (Sandbox Code Playgroud)

称之为:

assertClass("Packet type is correct", SomePacket.class, receivedPacket);
Run Code Online (Sandbox Code Playgroud)

这可以毫无问题地工作,但是在试验和玩这个游戏时,我的兴趣达到了instanceof运营商的高峰.

if (receivedPacket instanceof SomePacket) { .. }
Run Code Online (Sandbox Code Playgroud)

instanceof如何SomePacket用于引用手头的对象?它不是一个对象的实例,它不是一个类,它是什么?!一旦确定了什么类型SomePacket,那么有可能扩展我assertClass()不必包括SomePacket.class参数,而是支持SomePacket

Ste*_*man 24

看看现在包含在JUnit中的Hamcrest匹配器.你想要的是:

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.instanceOf;

assertThat(receivedPacket, instanceOf(SomePacket.class));
Run Code Online (Sandbox Code Playgroud)

这可以完成您需要的一切,包括断言失败时的正确错误消息.