文档详情

实验五 2 使用JUnit执行stub和mock object测试.doc

发布:2017-02-11约字共8页下载文档
文本预览下载声明
实践 使用JUnit执行stub和mock object测试 第一部分:用stub测量来测试代码。 stub:是代码的一部分。运行时我们用stub替换真正代码,忽略调用代码的实现。目的是用简单一点的行为替换一个复杂的行为,从而允许独立的测试代码的某一个部分。 使用stub的情况: 你不能修改一个现有系统,因为它很复杂,很容易崩溃。 进行粗粒度测试,如在不同系统间进行集成测试。 不使用stub的情况: stub本身可能很复杂,自身就需要调试。 因为stub的复杂,可能会很难维护。 stub不能很好的运用于细粒度测试。 不同的情况需要不同策略来测试。 例子:一个HTTP连接的例子:WebClient类通过调用自身的String getContent(URL url)方法来获得远程Web服务器上的对应的URL的内容。 这里WebClient中getContent()方法的典型代码如下: import .URL; import .HttpURLConnection; import java.io.InputStream; import java.io.IOException; public class WebClient { public String getContent(URL url) { StringBuffer content = new StringBuffer(); try { HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setDoInput(true); InputStream is = connection.getInputStream(); byte[] buffer = new byte[2048]; int count; while (-1 != (count = is.read(buffer))) { content.append(new String(buffer, 0, count)); } } catch (IOException e) { return null; } return content.toString(); } } 一种策略就是使用Web服务器,将测试的内容绑定在此服务器上,然后通过WebClient来连接并取得内容,然后验证这些内容与放入服务器的内容是否一致。这样做的问题就是维护很困难,而且测试代码分散在各个地方。 另一种策略是使用轻量级的Web服务器,这类服务器专门用于简单的服务情况,如嵌入式Web服务器或专门用于调试的服务器,Java高级开发中可以使用Jetty服务器作为专门的调试用服务器,其启动很快,而且可以对服务器进行定制。这部分练习可参阅补充内容。 我们这里提供另外一种方案,劫持连接,将HTTP连接替换掉,换成我们自己的stub连接。JDK的URL和HttpURLConnection类允许引入自定义的协议处理器,处理任何类型的通讯协议。可以将任何对HttpURLConnection类的调用转向到自己的测试类。 为实现自定义的URL协议处理器,需要调用以下JDK方法,传入自定义的URLStreamHandlerFactory对象: .URL.setURLStreamHandlerFactory(.URLStreamHandlerFactory); 当调用URL.openConnection()方法,URLStreamHandlerFactory就被调用,并返回一个URLStreamHandler对象。 为测试提供自定义的流处理器: import junit.framework.TestCase; import .URL; import .URLStreamHandlerFactory; import .URLStreamHandler; import .URLConnection; import java.io.IOException; public class TestWebClient extends TestCase { protected void setUp() { URL.setURLStreamHandlerFactory(new StubStreamHandlerFactory()); } private class StubStreamHandlerFactory implements URLStreamHandlerFactory { public URLStreamHandl
显示全部
相似文档