- 浏览: 959074 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
package stubbing;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class WebClient {
public String getContent(URL url) throws Exception {
StringBuffer content = new StringBuffer();
try {
URLConnection connection = 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));
}
return content.toString();
} catch (Exception e) {
throw e;
}
}
}
当对这样的代码进行测试,可能想到的是部署一个服务器,如tomcat服务器,然后测试。
这种方案存在的缺点是:
必须保证外部环境在你之前运行。
测试被分割为了两部分。
难以完成自动化测试。
另一个推荐的方式则是在应用中内嵌一个小型的服务工具,如jetty。
jetty的解压目录如
双击start.jar可以运行
如果要手动启动它的代码就像
public class JettySample {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
Context root = new Context(server, "/");
root.setResourceBase("./pom.xml");
root.setHandler(new ResourceHandler());
server.start();
}
}
如果要再test开始前启动它,可以这么写
package stubbing;
import java.net.MalformedURLException;
import java.net.URL;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class TestWebClient {
@Before
public void setUp() {
// 按着刚才的代码启动jee容器
}
@After
public void down() {
}
@Test
public void testGetContent() throws MalformedURLException, Exception {
WebClient client = new WebClient();
String result = client.getContent(new URL("http://localhost:8080/"));
Assert.assertEquals(true,
0 < result.indexOf("<TITLE>Powered By Jetty</TITLE>"));
}
}
更好的例子是手动启动,并且写了一个处理器
package stubbing;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.HttpHeaders;
import org.mortbay.jetty.handler.AbstractHandler;
import org.mortbay.util.ByteArrayISO8859Writer;
/**
* 实现一个jetty处理类,输出It works。
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-10-17 下午10:07:11
*/
public class TestGetContentOkHandler extends AbstractHandler {
public void handle(String arg0, HttpServletRequest arg1,
HttpServletResponse arg2, int arg3) throws IOException,
ServletException {
OutputStream out = arg2.getOutputStream();
ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer();
writer.write("It works");
writer.flush();
arg2.setIntHeader(HttpHeaders.CONTENT_LENGTH, writer.size());
writer.writeTo(out);
out.flush();
}
}
package stubbing;
import java.net.MalformedURLException;
import java.net.URL;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
public class TestWebClient {
@BeforeClass
public void setUp() throws Exception {
Server server = new Server(8080);
Context contentOkContext = new Context(server, "/");
// 设置一个处理器
contentOkContext.setHandler(new TestGetContentOkHandler());
server.setStopAtShutdown(true);
server.start();
}
@AfterClass
public void down() {
}
@Test
public void testGetContent() throws MalformedURLException, Exception {
WebClient client = new WebClient();
String result = client.getContent(new URL("http://localhost:8080/"));
Assert.assertEquals("It works", result);
}
}
另一种方法是自己写一个实现了URL的代码,这个URL处理器只是输出一段话,而不是真正的连接到网络。
import java.net.URL;
import java.net.URLStreamHandlerFactory;
import java.net.URLStreamHandler;
import java.net.URLConnection;
import java.io.IOException;
public class TestWebClient1 {
@BeforeClass
public static void setUp() {
TestWebClient1 t = new TestWebClient1();
URL.setURLStreamHandlerFactory(t.new StubStreamHandlerFactory());
}
private class StubStreamHandlerFactory implements
URLStreamHandlerFactory {
public URLStreamHandler createURLStreamHandler(String protocol) {
return new StubHttpURLStreamHandler();
}
}
private class StubHttpURLStreamHandler extends URLStreamHandler {
protected URLConnection openConnection(URL url)
throws IOException {
return new StubHttpURLConnection(url);
}
}
@Test
public void testGetContentOk() throws Exception {
WebClient client = new WebClient();
String result = client.getContent(new URL("http://localhost"));
assertEquals("It works", result);
}
}
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.io.InputStream;
import java.io.IOException;
import java.io.ByteArrayInputStream;
public class StubHttpURLConnection extends HttpURLConnection {
private boolean isInput = true;
protected StubHttpURLConnection(URL url) {
super(url);
}
public InputStream getInputStream() throws IOException {
if (!isInput) {
throw new ProtocolException(
"Cannot read from URLConnection"
+ " if doInput=false (call setDoInput(true))");
}
ByteArrayInputStream bais = new ByteArrayInputStream(
new String("It works").getBytes());
return bais;
}
public void disconnect() {}
public void connect() throws IOException {}
public boolean usingProxy() {
return false;
}
}
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class WebClient {
public String getContent(URL url) throws Exception {
StringBuffer content = new StringBuffer();
try {
URLConnection connection = 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));
}
return content.toString();
} catch (Exception e) {
throw e;
}
}
}
当对这样的代码进行测试,可能想到的是部署一个服务器,如tomcat服务器,然后测试。
这种方案存在的缺点是:
必须保证外部环境在你之前运行。
测试被分割为了两部分。
难以完成自动化测试。
另一个推荐的方式则是在应用中内嵌一个小型的服务工具,如jetty。
jetty的解压目录如
双击start.jar可以运行
如果要手动启动它的代码就像
public class JettySample {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
Context root = new Context(server, "/");
root.setResourceBase("./pom.xml");
root.setHandler(new ResourceHandler());
server.start();
}
}
如果要再test开始前启动它,可以这么写
package stubbing;
import java.net.MalformedURLException;
import java.net.URL;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class TestWebClient {
@Before
public void setUp() {
// 按着刚才的代码启动jee容器
}
@After
public void down() {
}
@Test
public void testGetContent() throws MalformedURLException, Exception {
WebClient client = new WebClient();
String result = client.getContent(new URL("http://localhost:8080/"));
Assert.assertEquals(true,
0 < result.indexOf("<TITLE>Powered By Jetty</TITLE>"));
}
}
更好的例子是手动启动,并且写了一个处理器
package stubbing;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.HttpHeaders;
import org.mortbay.jetty.handler.AbstractHandler;
import org.mortbay.util.ByteArrayISO8859Writer;
/**
* 实现一个jetty处理类,输出It works。
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-10-17 下午10:07:11
*/
public class TestGetContentOkHandler extends AbstractHandler {
public void handle(String arg0, HttpServletRequest arg1,
HttpServletResponse arg2, int arg3) throws IOException,
ServletException {
OutputStream out = arg2.getOutputStream();
ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer();
writer.write("It works");
writer.flush();
arg2.setIntHeader(HttpHeaders.CONTENT_LENGTH, writer.size());
writer.writeTo(out);
out.flush();
}
}
package stubbing;
import java.net.MalformedURLException;
import java.net.URL;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
public class TestWebClient {
@BeforeClass
public void setUp() throws Exception {
Server server = new Server(8080);
Context contentOkContext = new Context(server, "/");
// 设置一个处理器
contentOkContext.setHandler(new TestGetContentOkHandler());
server.setStopAtShutdown(true);
server.start();
}
@AfterClass
public void down() {
}
@Test
public void testGetContent() throws MalformedURLException, Exception {
WebClient client = new WebClient();
String result = client.getContent(new URL("http://localhost:8080/"));
Assert.assertEquals("It works", result);
}
}
另一种方法是自己写一个实现了URL的代码,这个URL处理器只是输出一段话,而不是真正的连接到网络。
import java.net.URL;
import java.net.URLStreamHandlerFactory;
import java.net.URLStreamHandler;
import java.net.URLConnection;
import java.io.IOException;
public class TestWebClient1 {
@BeforeClass
public static void setUp() {
TestWebClient1 t = new TestWebClient1();
URL.setURLStreamHandlerFactory(t.new StubStreamHandlerFactory());
}
private class StubStreamHandlerFactory implements
URLStreamHandlerFactory {
public URLStreamHandler createURLStreamHandler(String protocol) {
return new StubHttpURLStreamHandler();
}
}
private class StubHttpURLStreamHandler extends URLStreamHandler {
protected URLConnection openConnection(URL url)
throws IOException {
return new StubHttpURLConnection(url);
}
}
@Test
public void testGetContentOk() throws Exception {
WebClient client = new WebClient();
String result = client.getContent(new URL("http://localhost"));
assertEquals("It works", result);
}
}
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.io.InputStream;
import java.io.IOException;
import java.io.ByteArrayInputStream;
public class StubHttpURLConnection extends HttpURLConnection {
private boolean isInput = true;
protected StubHttpURLConnection(URL url) {
super(url);
}
public InputStream getInputStream() throws IOException {
if (!isInput) {
throw new ProtocolException(
"Cannot read from URLConnection"
+ " if doInput=false (call setDoInput(true))");
}
ByteArrayInputStream bais = new ByteArrayInputStream(
new String("It works").getBytes());
return bais;
}
public void disconnect() {}
public void connect() throws IOException {}
public boolean usingProxy() {
return false;
}
}
发表评论
-
DEBUG -- CLOSE BY CLIENT STACK TRACE
2011-10-20 10:28 27638在单元测试测试环境下主要参数两个错误信息: 1.java.la ... -
奇怪的乱码
2011-10-20 00:14 1374通过ant运行build,然后启动测试。测试的时候有log4j ... -
mock对象测试
2011-10-17 22:48 1316package mock; public class Acc ... -
cobertura做测试覆盖率 ant的配置
2011-09-25 23:05 7478cobertura原理大致如下: 首先修改我们编译后的clas ... -
软件测试的种类
2011-09-18 17:58 1154acceptance test 验收测试 你的程序满足了客户的 ... -
hamcrest
2011-09-18 16:51 1209在一个测试用例中,有时候不得不存在多个断言,比如 @Test ... -
@Ignore 指定跳过测试用例
2011-09-18 16:06 1750在3.x版本中,如果我们不想启动某些测试,需要将方法名更改为非 ... -
@Test
2011-09-17 23:27 8101@Test注解是测试的基础,它提供了其他作用 1.指定将会抛 ... -
测试规范
2011-09-16 00:27 1008测试方法名一般有两种 testxxxx xxxx是要测试的域 ... -
@Before, @BeforeClass, @After, @AfterClass
2011-09-15 23:30 7819@Before, @BeforeClass, @After, ... -
Suite runner
2011-09-14 23:29 1148套件运行器 它可以运行多个测试。 package test; ... -
@Parameters Parameterized runner
2011-09-14 22:46 1624先看一个例子 package te ... -
junit的核心对象
2011-09-12 21:52 1183概念责任Assert不同条件的断言。如果成功,无什么特殊的信息 ... -
基础知识
2011-09-12 20:01 933注解 @Before, @BeforeClass, @Afte ... -
junit网址
2011-08-31 16:29 1018http://junit.sourceforge.net/ h ...
相关推荐
在IT行业中,Wavelink是一种专门用于远程终端访问和设备管理的软件解决方案,它优化了企业与各种设备(如工业手持设备、移动计算机和条形码扫描器)之间的通信。"Wavelink存根"指的是为Wavelink软件创建的接口或者...
在IT行业中,存根(Stub)是一种常用的软件开发工具,特别是在进行单元测试或者模拟外部服务交互时。"cozy-stub"是一个专为Cozy-light应用程序的CLI(命令行界面)索引API设计的存根助手。这个工具的目的是帮助...
- 运行时错误:执行期间出现问题。 - 语法错误:不符合语言规范。 - **验证方法**: - 单元测试:针对单个模块。 - 集成测试:测试模块间的连接。 - 系统测试:测试整个系统。 #### 三十九、单元测试与集成测试...
- 探索解决方案。 - 推荐最佳方案。 - 编写开发计划。 - 提交审查。 9. **软件的特点**: - 抽象性:软件是逻辑实体,不易直接观察。 - 可复制性:复制成本低。 - 不会磨损:不受物理损耗的影响。 - 硬件...
它可以轻松地与这些框架集成,以构建完整的测试解决方案。 6. **HTTP请求存根** Sinon.js 提供了`sinon-server`模块,可以创建假的HTTP服务器来存根Ajax请求。这在测试涉及网络通信的组件时非常有用,确保测试不...
- 使用解决方案资源管理器重命名Class1.cs文件为LogonInfo.cs,并修改其中的构造函数以接受两个字符串参数:userId和password。 2. **生成单元测试** - 右键点击LogonInfo()构造函数,选择“创建测试…”菜单项。...
4. Mock对象:在单元测试中,模拟(Mock)和存根(Stub)对象常用来隔离测试,避免依赖外部系统或真实数据库。 5. 断言库:用于验证代码行为是否符合预期,例如`assertEquals`、`assertTrue`等。 6. 结果报告:测试...
- **复杂依赖**:处理复杂的类或模块依赖关系时,可以使用模拟对象(Mocks)和存根(Stubs)来隔离测试。 - **持续集成**:通过持续集成(CI)工具自动运行单元测试,及时发现并修复问题。 业界数据显示,单元测试...
这样的组合使得开发者能够在不依赖外部网络服务的情况下,测试和调试与远程服务器交互的部分。 【标签】"开源项目"表明整个解决方案是开放源代码的,意味着任何人都可以查看、学习、修改和分发代码。这对于开发者...
5. **Maven 和 Gradle**:Maven 和 Gradle 是更广泛使用的Java项目构建工具,但它们的约定式项目布局可能不适合所有情况,Ivy 提供了更定制化的解决方案。 6. **portlet.xml** 和 **web.xml**:portlet.xml 定义...
综上所述,"dependency-injection-lib"可能是一个专为Java开发的轻量级或全面的依赖注入解决方案,帮助开发者遵循依赖注入原则,提升代码质量,简化系统架构。使用这样的库,开发者可以更专注于业务逻辑,而不是对象...
当您需要测试依赖于第三方Web服务的Web服务时,您必须在加载整个平台,创建复杂的存根服务或模拟代码库中调用外部服务的部分之间进行选择。 随着平台大小的增加,尝试一次加载所有平台将使您的集成测试停滞不前。 ...
1. ASP.NET MVC项目的解决方案文件(.sln) 2. MVC项目的源代码文件夹,包括Controllers、Models、Views等 3. 自定义业务服务的类库项目,包含接口和实现 4. AutoFac配置和注册代码 5. 示例的测试用例,可能使用了...
6. **常见问题和解决方案**:面对测试中的挑战,如循环依赖、多线程环境下的模拟等,Jmockit如何应对。 通过深入学习和实践,开发者可以充分利用Jmockit提高测试效率,保证代码质量,降低维护成本。对于从事Java...
这个工具极大地简化了对C代码进行单元测试的过程,因为它自动为程序员生成必要的存根函数,这些函数可以模拟被测试代码依赖的外部功能。在C编程中,单元测试通常需要创建这样的存根,以便在孤立环境中测试特定函数或...
- 结合其他测试框架:MockGen可以与其他测试框架(如NUnit、xUnit等)结合使用,提供更完整的测试解决方案。 综上所述,MockGen是一个强大的工具,能够帮助C#开发者构建高效的测试环境,提高测试的质量和速度。...
综上所述,"mms_ui_test_project"是一个全面的UI自动化测试解决方案,涵盖了从测试框架的选择、测试设计策略到持续集成和测试报告的各个环节。通过深入研究这个项目,我们可以学习到如何有效地构建和维护一个UI自动...
99. **解决方案管理器(Ctrl+W,S)**:显示或隐藏解决方案资源管理器,管理项目结构。 100. **类视图(Ctrl+W,C)**:显示或隐藏类视图窗口,查看项目中类和类型的层次关系。 101. **错误列表(Ctrl+W,E)**:显示或...