如何单元测试spring集成dsl代码

时间:2018-04-20 10:56:47

标签: spring-integration spring-integration-dsl

我无法找到一个单独测试spring integration dsl的简单示例,它涉及从队列中获取消息并进行休息调用。

我查看了示例https://github.com/spring-projects/spring-integration-java-dsl但是对于我想要编写单元测试的下面代码的限定符等不清楚。

import java.io.*;
import java.util.*;
import java.text.*;

import javax.servlet.*;
import javax.servlet.http.*;

import java.lang.Runtime;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/*
 * This is a simple example of an HTTP Servlet.  It responds to the GET
 * and HEAD methods of the HTTP protocol.
 */
public class U extends HttpServlet
{ 
        public void doPost (HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException
            {
                //value chosen to limit denial of service
                if (req.getContentLength() > 8*1024) {
                    res.setContentType("text/html");
                    PrintWriter out = res.getWriter();
                    out.println("<html>\n");
            out.println("<title>Too big</title>");
                    out.println("<body><h1>Error - content length &gt;8k not allowed"
);
                    out.println("</h1></body></html>");
                } else {
                    doGet(req, res);
                }
            }

    /**
     * Handle the GET and HEAD methods by building a simple web page.
     * HEAD is just like GET, except that the server returns only the
     * headers (including content length) not the body we write.
     */
    public void doGet (HttpServletRequest request,
                       HttpServletResponse response) 
        throws ServletException, IOException
        {
            Runtime runner= Runtime.getRuntime();
        PrintWriter out = response.getWriter();
        String commandline=request.getRequestURI();
            String cmd;
            response.setContentType("text/html");
        out.println("<html><body><pre>");
            out.flush();

        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        out.println( sdf.format(cal.getTime()) );    
        out.close();
          }
} 

1 个答案:

答案 0 :(得分:1)

您的问题还需要其他一些内容来解释更多要求。

无论如何,我会尽力回答这个问题。

Spring集成Java DSL只不过是编写工具来连接bean并将集成组件构建到流中。最后,在运行时,我们只有一组bean,我们可以与应用程序上下文中的任何其他bean进行交互。

因此,如果故事是关于从JMS消耗一些目的地并验证我们从那里得到什么,那么就可以在嵌入模式下运行ActiveMQ了 - 它就像bean一样简单:

new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false")

然后使用JmsTemplate将一些测试数据发送到所需目标(将按需创建),并使用问题IntegrationFlow中提到的通道中的Integration消息。

通常,为了使用测试数据,我们使用QueueChannel及其receive(long timeout)。这样我们就会阻止单元测试,直到数据到达或超时为止。

验证流程工作的另一种方法是使用Spring Integration Testing Framework。从那里,您可以使用MockIntegration替换应用程序上下文中的真实MessageHandler,然后验证与模拟的交互。

希望有所帮助。