虽然以前用easymock测试过Dao,但那些Dao的实现,要么就hibernate,要么就用spring,而这两个框架的执行正确与否我们是不用关心的。JDBC是不是也这样测试了。答案是肯定的。
这几天要用存储过程跟jdbc来做个项目,想想也有好长一段时间没用过JDBC来做项目了。该复习复习了。
前阵子学了easymock,真好现在可以派上用场了。不过在测试的过程中还是遇到了不小问题,想来是自己基础不好的缘故。
这次不TDD了,太麻烦了。
先看看我们要测试的代码
java 代码
- CallableStatementcstmt = null;
- try {
- cstmt = _conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
- cstmt.setString(1, "1");
- cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
-
- cstmt.executeUpdate();
- return cstmt.getString(2);
-
- } catch (Exception e) {
- GxDebug.logException(e);
- e.printStackTrace();
- return null;
- } finally {
- if (cstmt != null)
- try {
- cstmt.close();
- } catch (Exception e) {
- }
- }
代码还挺长的。从上面的代码我们知道我们必须mock两个对象进去。一个是Connection, 一个是
CallableStatementcstmt 。
好再看看我们的测试代码
java 代码
- conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
- conControl.setReturnValue(cstmt);
- conControl.replay();
-
- cstmt.setString(1, "1");
- cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
- cstmt.executeUpdate();
- cstmtControl.setReturnValue(1);
- cstmt.getString(2);
- cstmtControl.setReturnValue("5,4,3");
- cstmt.close();
- cstmtControl.replay();
-
-
- String rusult = dao.getNumber();
- Assert.assertEquals("5,4,3", rusult);
-
- conControl.verify();
- cstmtControl.verify();
oh,my got!测试代码比实现代码还要多。这段代码能执行吗?
我想可以的。easymock的原理是记录-回放的模式。
我想要做的工作是:
1,记录你mock对象的工作记录,比如上面的代码我们mock对象的工作记录是:
java 代码
- conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");
- conControl.setReturnValue(cstmt);
- cstmt.setString(1, "1");
- cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
- cstmt.executeUpdate();
- cstmtControl.setReturnValue(1);
- cstmt.getString(2);
- cstmtControl.setReturnValue("5,4,3");
- cstmt.close();
-
如果你工作记录的代码要求有返回值的话,那么你必须提供一个自定义的值给它,否则会报错。比如上面的
cstmt.getString(2);
cstmtControl.setReturnValue("5,4,3"); //自己定义的返回值,用作以后的比较。
上面的是记录操作,回放的时候,easymock会把记录的操作跟你实际的代码进行比较,如果里面出了什么差错,那么不好意思你的代码有问题,请修正后再测试。
如果有兴趣可以自己试下。
分享到:
相关推荐
基于JavaScript的线上车位销售系统源码+sql数据库+项目说明.zip 【资源介绍】 IDEA开发,JAVA编写,SSM框架 ...测试工具使用了Junit、Easymock 对每个service层和controller层的函数各进行了一次黑盒测试和白盒测试
测试方面,EasyMock(easymock.jar和easymockclassextension.jar)是Spring测试套件的一部分,但只在构建和运行测试时需要,不随应用发布。FreeMarker(freemarker.jar)是Spring支持的模板引擎之一,如果你的应用...
Connection Mother 是 JAVA 的一个简单框架,它促进了 JDBC 的单元测试。 它依赖于 EasyMock 框架来模拟连接。 它基于 ObjectMother 的模式,该模式隐藏了构建假数据库连接的复杂性。
EasyMock是一个模拟测试框架,它允许开发者创建和控制对象的行为,以便进行单元测试。通过EasyMock,可以轻松地模拟依赖对象,从而专注于测试目标代码的行为,而不是整个系统。 5. **Ehcache** Ehcache是一个广泛...
JUnit是Java中常用的单元测试框架,可以用于测试单个方法的功能。Mockito或EasyMock等库则可以帮助模拟依赖,以便进行隔离测试。对于整个支付流程的测试,可能需要用到像Selenium这样的工具来进行端到端的集成测试。...
Spring 的测试套件用到了 EasyMock,因此只有构建和运行测试套件时才用到这个 JAR,无需随你的应用一起发布。 freemarkerfreemaker.jar Spring 提供了 FreeMarker 模板引擎的包装类,还为把 FreeMarker 模板用作 ...
若使用JDBC或其他ORM工具如Hibernate或JDO,则无需包含它们。 ### 13. iText - **JAR文件**: itext-1.02b.jar - **说明**: Spring通过iText提供web层的PDF支持。仅当web应用需要生成PDF输出时,才需包含此JAR文件...
10. **测试框架**:Spring 3.0改进了测试支持,提供Mockito和EasyMock集成,使得单元测试和集成测试更加便捷。 这些只是Spring 3.0框架中的一部分关键特性。通过下载的`spring-framework-3.0.0.RELEASE`压缩包,...
Spring TestContext框架可以帮助开发者配置和管理测试环境,而Mockito和EasyMock等库的集成则简化了模拟对象的创建。 7. **模块化**:Spring 3.2进一步加强了模块化,使得开发者可以根据项目需求选择引入必要的模块...
它提供了Mockito和EasyMock的集成,使得创建测试桩变得简单。此外,Spring TestContext Framework可以自动配置Spring容器,使得集成测试变得更加便捷。 六、与其他技术的兼容性 Spring 4.0.3.RELEASE对Java EE 7有...
如果你使用JDBC或其他ORM工具,例如Hibernate或JDO,则无需包含这些文件。 13. **iText** - **JAR文件**:itext-1.02b.jar - **说明**:Spring使用iText提供Web层的PDF支持。只有当你的Web应用需要生成PDF输出时...
Spring Test模块提供了全面的单元测试和集成测试支持,包括Mockito和EasyMock的集成,以及对Web应用的模拟测试。 十、其他改进 Spring 3.0还增强了对Groovy的支持,允许使用Groovy脚本作为配置。此外,对Java EE 6...
3.2.17版加强了Mockito和EasyMock的集成,使得测试更便捷。 9. **国际化支持** Spring 3.2.17包含对i18n(国际化)的支持,通过MessageSource接口,开发者可以轻松地实现多语言环境的应用。 10. **安全性集成** ...
通常这样的例子会包括创建一个测试类,并使用 TestNG 的注解来定义测试方法。 - **示例代码**: ```java import org.testng.annotations.Test; import com.jtester.junit.Assert; public class SimpleTest { @...
熟练掌握JDBC API(如`DriverManager`、`Connection`、`PreparedStatement`、`ResultSet`等)的使用方法,对于实现数据的增删改查等基本操作至关重要。这将帮助开发者更加灵活地与各种关系型数据库进行交互。 ### ...
使用JUnit或TestNG进行单元测试,Mockito或EasyMock进行模拟测试,以及Spring Boot的@SpringBootTest注解进行集成测试,这些都是保证代码质量的重要手段。 综上所述,Webgisedo是一个围绕Java Web开发的项目,可能...
- **测试工具**:JUnit、JUnit Perf、EasyMock、JMock、FIT、Fitnesse、DBFit、Selenium、JMeter、JAMon。 - **持续集成工具**:CruiseControl、Hudson。 - **项目管理工具**:VersionOne、JIRA、Bugzilla、...