如何在mule Junit测试中断言对象的实际列表,其中实际的mule流返回POJO的列表?

时间:2015-02-24 07:03:26

标签: java mule

我正在尝试断言用户定义的对象列表,这些对象通过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和每个对象成员的大小?

2 个答案:

答案 0 :(得分:0)

我不知道如何在HTTP中传递java对象。你需要以某种方式序列化。可能是xml,json或类似的。

答案 1 :(得分:0)

那里有一些评论的东西。 您尝试执行的断言(如果对象是正确的)将仅验证有效负载的类型,这不是一个断言。也许你可以尝试做某种比较。 如果您只需要验证有效负载的类型,您还可以尝试使用isAssignableFrom方法,因为它将覆盖类及其父级(请查看此链接java: Class.isInstance vs Class.isAssignableFrom)。

但无论如何,关于你的特定错误,例外是告诉你不能做这个演员:

  ArrayList<Object> payloadObj = (ArrayList<Object>) obj;

这是因为在您使用客户端调用http端点之后,它将返回一个输入流,您应该在进行此类转换之前首先使用该输入流。

如果http端点对您的测试不是很重要,您可以执行流程参考。如果没有,你可以检查一些骡变压器。

HTH