java – 你如何处理一个弹簧网络应用程序的TDD

我正在寻找有关如何以纯TDD方式创建 Spring Web应用程序(使用hibernate)的建议.这意味着您不应该首先编写生产代码而不进行失败的单元测试.

您是否会对应用程序上下文的创建进行单元测试?如果是的话你会怎么做呢?

使用java配置而不是基于xml或基于注释的配置时,TDD弹簧应用程序会更容易吗?

解决方法

当您编写需要Spring ApplicationContext和数据库的测试时,这是一个集成测试,而不是单元测试.单元测试的一般规则是:

>他们测试一件事(即对其他类/ bean的方法调用不赞成)
>他们有精简设置(即没有将测试数据加载到数据库中,没有交易,没有巨大的应用程序上下文)

另一方面,集成测试:

>速度慢(创建数据库连接,将测试数据加载到数据库中,大型设置步骤连接多个bean,配置弹簧,……)
>脆弱(因为许多依赖)
>如果它们失败了,你只知道它已经执行了500’000行代码中的某个地方.

因此对于TDD,您尝试构建可以在没有Spring的情况下创建的bean.以这样的方式编写它们,使您不必启动Hibernate或数据库.这里的主要原因是TDD需要每天运行数百次单元测试.如果它们运行时间超过10秒,您最终会觉得您在浪费时间等待测试结束.

接下来的问题通常是如何以这种方式测试任何有用的东西.好吧,这样想吧:Hibernate有效.它已经有很多单元测试.测试hibernate是浪费时间.因此,您应该在应用程序中创建一个完全隐藏Hibernate代码的层.

而不是连接FooDao,连接一个具有byId()方法的IFooDao并返回一个POJO.在单元测试中,您可以创建一个返回单个实例的模拟实现.

当你想知道真正的FooDao是否有效时,为几次调用byId()的函数编写集成测试.

但避免“从DAO获取对象,进程对象,再次使用DAO保存对象”.这是三个不同的测试(两个IT,一个UT).

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...