我正在尝试断言用户定义的对象列表,这些对象通过mule流返回,如下面的testcase。
import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.Assert;
import org.junit.Test;
import org.mule.api.MuleMessage;
import org.mule.api.client.LocalMuleClient;
import org.mule.tck.junit4.FunctionalTestCase;
import org.mule.transport.http.ReleasingInputStream;
public class UnitedTest extends FunctionalTestCase{
@Override
protected String getConfigFile() {
return "src/main/app/united.xml";
}
@Test
public void sampletest() throws Exception {
LocalMuleClient client = muleContext.getClient();
MuleMessage response = client.send("http://localhost:8083/united/CLE", "", null, 1000000);
Assert.assertNotNull(response) ;
System.out.println(response.getPayload());
Object obj = response.getPayload();
ArrayList<Object> payloadObj = (ArrayList<Object>) obj;
Object resObj = (Object) payloadObj.get(0);
if(resObj instanceof Flight){
Flight flght = (Flight)resObj;
Assert.assertNotNull(flght);
}
}
}
我收到classCastException。
java.lang.ClassCastException: org.mule.transport.http.ReleasingInputStream cannot be cast to java.util.ArrayList
at UnitedTest.sampletest(UnitedTest.java:27)
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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:46)
at org.junit.internal.runners.statements.FailOnTimeout$1.run(FailOnTimeout.java:28)
如何断言arraylist和每个对象成员的大小?
答案 0 :(得分:0)
我不知道如何在HTTP中传递java对象。你需要以某种方式序列化。可能是xml,json或类似的。
答案 1 :(得分:0)
那里有一些评论的东西。 您尝试执行的断言(如果对象是正确的)将仅验证有效负载的类型,这不是一个断言。也许你可以尝试做某种比较。 如果您只需要验证有效负载的类型,您还可以尝试使用isAssignableFrom方法,因为它将覆盖类及其父级(请查看此链接java: Class.isInstance vs Class.isAssignableFrom)。
但无论如何,关于你的特定错误,例外是告诉你不能做这个演员:
ArrayList<Object> payloadObj = (ArrayList<Object>) obj;
这是因为在您使用客户端调用http端点之后,它将返回一个输入流,您应该在进行此类转换之前首先使用该输入流。
如果http端点对您的测试不是很重要,您可以执行流程参考。如果没有,你可以检查一些骡变压器。
HTH