0 0

看完了<测试驱动开发>纠结中.....关于遇到了domain对象实现依赖数据库如何处理10

粗粗的看完了测试驱动开发,首先mark一下.由于不会python,因此第二步分直接跳过
书中的例子都比较理想化,似乎TDD主要Driven出来的都是Domain内存对象,对于数据库以及网络依赖的部分很少由涉及.

目前code的时候突然发现自己的一段domain业务逻辑代码需要依赖数据库

我的处境:code example
........
private MailReceiver strategy
public void sendEmail(){
   Employee emp = strategy.getReceiver();
}
.....
其中 MailReceiver 是一个接口,是一个strategy模式,不同实现类有不同的方法实现,返回一个Employee对象.
因此对于这个类的测试应该放到DomainTest中,但是问题是这个策略模式的几个实现类是通过执行sql语句获取返回值.

于是纠结了,我是应该在测试中建mock来进行隔离吗?(这个项目不是hibernate的),或者说对于这个测试我应该放到integration测试中?

BTW,感觉TDD不是很容易掌握的,现实中总是由许多问题
我发现最近TDD版块的top2都是我的帖子阿,看来这个版块运动不是很活跃哈

问题补充
难道没有人有类似的经历吗?
虽然已经将unit test已经被抛弃不止一次,但这次决定将TDD走下去。
2010年11月16日 10:30

4个答案 按时间排序 按投票排序

0 0

xixix2004 写道
我想问你连个数据库测什么?比如你用ORACLE+HIBERNATE?

你去测什么?

测ORACLE是不是真能存数据,还是测HIBERNATE得OR-MAPPING是否有BUG?

你测的是你的业务逻辑啊。跟连不连,连什么数据库有什么关系。

伪造数据吧。跟数据库真的没什么关系。

你懂的。


任何东西都要测,大部分写的大部分应用就是数据库存储,凭什么不测最重要的数据库部分?
我上面的写法,只是说让你的测试可以更好的独立出来,而不是说我们不需要测数据库。

2010年11月16日 10:30
0 0

我想问你连个数据库测什么?比如你用ORACLE+HIBERNATE?

你去测什么?

测ORACLE是不是真能存数据,还是测HIBERNATE得OR-MAPPING是否有BUG?

你测的是你的业务逻辑啊。跟连不连,连什么数据库有什么关系。

伪造数据吧。跟数据库真的没什么关系。

你懂的。

2010年11月16日 10:30
0 0

public void sendEmail(){
   Employee emp = strategy.getReceiver();
}

改成
public void sendEmail(Employee emp){
}
这样就可以单独测mail功能了。

2010年11月16日 10:30
0 0

这年头有几个程序不需要依赖数据库的?这不是什么新鲜事.

既然你的对象依赖数据库,就搞个TDD专用数据库,往里面插入MOCK数据(有个东西叫DBUNIT),带上数据库一起TDD.

这板块贴子不活跃,是因为几年前就把这些题目都讨论过了.
有时间还是把以前的精华贴,良好贴都看一遍.

2010年11月16日 10:30

相关推荐

    jcifs-1.3.17.jar

    &lt;param-name&gt;jcifs.smb.client.domain&lt;/param-name&gt; &lt;param-value&gt;域名&lt;/param-value&gt; &lt;/init-param&gt; &lt;init-param&gt; &lt;param-name&gt;jcifs.netbios.wins&lt;/param-name&gt; &lt;param-value&gt;域服务器的IP&lt;/param...

    对DAO编写单元测试源代码

    &lt;br&gt;&lt;br&gt;public class UserDaoImpl implements UserDao {&lt;br&gt;&lt;br&gt; public User queryForSignOn(String username) {&lt;br&gt; User user = queryUser(username);&lt;br&gt; if(user.getLocked())&lt;br&gt; throw new LockException...

    jboss7连接oracle驱动及配置

    在JBoss 7的配置文件`standalone.xml`或`domain.xml`中,找到`subsystem`标签下的`datasources`节点,然后添加一个新的数据源。例如: ```xml &lt;datasources&gt; ... &lt;datasource jndi-name="java:jboss/datasources/...

    ArcGIS server tomcat crossdomain.xml

    然而,需要注意的是,虽然`crossdomain.xml`对Flash和某些老版本的浏览器有效,但现代浏览器(尤其是那些不支持Flash的)通常依赖于CORS(Cross-Origin Resource Sharing)头部来处理跨域请求。因此,在ArcGIS ...

    Software Testing and Continuous Quality Improvement

    Software Testing and Continuous Quality Improvement&lt;br&gt;&lt;br&gt;SECTION I SOFTWARE QUALITY IN PERSPECTIVE . . . . . . . . . . . . . . . 1&lt;br&gt;1 Quality Assurance Framework. . . . . . . . . . . . . . . . . ....

    Impala安装,亲测

    &lt;name&gt;dfs.domain.socket.path&lt;/name&gt; &lt;value&gt;/var/run/hadoop-hdfs/dn._PORT&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;dfs.client.file-block-storage-locations.timeout&lt;/name&gt; &lt;value&gt;3000&lt;/value&gt; &lt;/property&gt;...

    jbpm7.3+mysql相关配置文件

    此外,可能还需要在`standalone.xml`或`domain.xml`(取决于JBoss运行模式)中添加MySQL驱动的配置: ```xml &lt;drivers&gt; ... &lt;driver name="mysql" module="com.mysql"&gt; &lt;driver-class&gt;com.mysql.jdbc.Driver&lt;/...

    Maven高级适合学习使用''

    - **既是聚合也是父工程**:通常情况下,聚合项目也会充当父工程的角色,这意味着它可以通过 `&lt;dependencyManagement&gt;` 和 `&lt;properties&gt;` 来集中管理子模块的依赖版本以及公共配置。 ##### 2. 创建子模块 - **...

    spring data jpa入门实例

    Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码。Spring Data JPA 基于 Java ...

    maven Springmvc 4.16 环境搭建

    如果需要使用Spring JDBC或者Task,可以在pom.xml中添加相应的依赖,并在代码中进行相应的配置和实现。 在实际开发中,你可能还需要配置视图解析器、拦截器、过滤器等,以满足项目需求。Spring MVC允许你高度定制化...

    maven多模块开发

    综上所述,“maven多模块开发”是大型Java项目中常用的一种组织策略,它结合了Maven的强大依赖管理和Spring Data JPA的便捷数据库操作,为开发者提供了高效、有序的开发环境。通过合理规划和配置,可以极大地提高...

    SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询.pdf

    在SpringBoot项目中,整合Mybatis-Plus并实现多数据源的动态切换,同时支持分页查询是一项常见的需求。以下将详细阐述这个过程中的关键步骤和技术要点。 首先,我们需要引入必要的Maven依赖。这里提到了四个关键...

    The Art of Assembly Language Programming

    The 80x86 MOV Instruction&lt;br&gt;4.8 - Some Final Comments on the MOV Instructions&lt;br&gt;&lt;br&gt;4.9 Laboratory Exercises&lt;br&gt;4.9.1 The UCR Standard Library for 80x86 Assembly Language Programmers&lt;br&gt;4.9.2 ...

    Spring中使用OpenJPA

    总之,Spring与OpenJPA的结合为Java开发者提供了一个强大且灵活的持久层解决方案,使得我们能够在面向对象的环境中轻松地处理数据库操作,提高开发效率。在项目实践中,不断学习和优化,才能更好地发挥它们的优势。

    DWR用户保存

    &lt;convert converter="bean" match="com.dwr.domain.User"/&gt; &lt;/allow&gt; &lt;/dwr&gt; ``` 这里的`creator="spring"`表明我们将使用Spring来实例化这个对象,而`javascript="UserServiceImpl"`定义了在客户端可以使用的...

    Web项目中使用Spring, 使用 Spring 的器监听器 ContextLoaderListener.docx

    通过以上步骤,Web项目就可以有效地整合Spring框架,实现控制反转(IoC)和面向切面编程(AOP),简化了组件之间的依赖关系,提高了代码的可测试性和可维护性。同时,通过监听器`ContextLoaderListener`,可以在Web...

    dwr框架详细介绍 讲解浅显易懂

    3. `&lt;init-param&gt;`中的`&lt;param-name&gt;debug&lt;/param-name&gt;`和`&lt;param-value&gt;true&lt;/param-value&gt;`用于开启调试模式。 4. 另一个`&lt;init-param&gt;`中的`&lt;param-name&gt;classes&lt;/param-name&gt;`用于指定要暴露给客户端的Java类,...

    Hibernate开发jar包

    Hibernate开发jar包 5.07 配置文件内容 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ...

    Spring+Redis+Session共享

    需要注意的是,如果修改了这些设置而测试仍然失败,可能是浏览器缓存问题,此时可以通过F12打开开发者工具,在“Application”标签页下的“Storage”-&gt;“Cookies”中手动修改Cookie的域。 总结而言,通过Spring-...

    Springboot创建子父工程过程图解

    &lt;module&gt;springboot-domain&lt;/module&gt; &lt;module&gt;springboot-sdk&lt;/module&gt; &lt;/modules&gt; &lt;properties&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;build.jdk.version&gt;1.8&lt;/build.jdk....

Global site tag (gtag.js) - Google Analytics