关于一个junit的例子的分析

问题:有一个方法,其功能为连接一个web地址(资源),
public String getContent (URL url)
{
    url.openConnect();
}
测试的问题:(以下代码不包括import的包)
1  既然是关于web的测试,就需要一个web服务器,选择:建立一个如TOMCAT的服务器,还是用嵌入式的服务器,如jetty。
分析:鉴于只是一个单元测试,我们考虑用jetty。
2  url连接的资源,是给一个静态的文件,还是作些动态的处理?
分析:动态的处理比较灵活,采用这个方案。在jetty中,就是用生成一个处理器来动态处理来自url的信息。

由上可以构造如下:
public class TestWebClientSkeleton extends TestCase
{
    protected void setUp()
    {
        //启动jetty
    }
    protected void tearDown()
    {
        //停止jetty
    }
    public void testGetContentOk() throws Exception
    {
        WebClient client = new WebClient();
        String result = client.getContent( new URL(
                "http://localhost:8081/testGetContentOk" ));
        assertEquals( "It works", result );
    }
}


3  如上可见:如果有多个关于WEB的测试,则每次测试都要启动和停止一次jetty,所以用一个TestSetup类,将一堆测试整合为一个suite,对次suite有一个setup,teardown方法,即对所有的测试只有一个setup ,teardown。如下:
public class TestWebClientSetup1 extends TestSetup
{
    protected static HttpServer server;

    public TestWebClientSetup1( Test suite )
    {
        super( suite );
    }
   
    protected void setup() throws Exception
    {
        server = new HttpServer();
        SocketListener listener = new SocketListener();
        listener.setPort( 8081 );
        server.addListener( listener );
       
        HttpContext context1 = new HttpContext();
        context1.setContextPath( "/testGetContentOk" );
        context1.addHandler( new TestGetContentOkHandler() );
        server.addContext( context1 );
       
        server.start();
    }
   
    protected void tearDown() throws Exception
    {
        server.stop();
    }
   
    private class TestGetContentOkHandler extends AbstractHttpHandler
    {
        public void handle(String pathInContext, String pathParams,
                HttpRequest request, HttpResponse response)
        throws IOException
        {
            OutputStream out = response.getOutStream();
            ByteArrayIOS8859Writer writer = new ByteArrayIOS8859Writer();
            writer.write("It works");
            writer.flush();
            response.setIntField(HttpFields._ContentLength, writer.size() );
            writer.writeTo( out );
            out.flush();
            request.setHandled( true );
        }
    }
}
测试类如下:
public class TestWebClient1 extends TestCase
{
    public static Test suite()//显示地创建一个suite,并返回 一个包含对该suite中的所有测试通用的fixture的                                                     //TestSetup,(将它视为一个suite来理解( 但是不是),可以理解地好些.)
    {
        TestSuite suite = new TestSuite();
        suite.addTestSuite( TestWebClient1.class );
        return new TestWebClientSetup1( suite );
    }
   
    public void testGetContentOk() throws Exception
    {
        WebClient client = new WebClient();
        String result = client.getContent( new URL( "http://localhost:8081/testGetContentOk"));
       
        assertEquals( "It works", result );
    }
}
/***********************************************************************************/
关于TestSetup:
实现了Test接口
专门用来setUp和tearDown的,
以Test为构造器参数。
创建TestSetup的子类,继承setUp和tearDown,在其中完成额外的初始化和结束化工作。
初始化工作只在所有test进行前执行一次,
结束化工作只在所有test完成之后执行一次。
/***********************************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值