Java 没有本地数据库的TDD?
在开发Rails应用程序时,我们在开发环境中使用本地数据库,并确保我们的规范作为TDD的一部分通过 在Java中执行TDD时,不使用类似Sqlite的本地数据库是一种规范吗?我被告知,内存数据库(HSQL)是运行单元测试和集成测试所需的一切。这是一种标准做法吗Java 没有本地数据库的TDD?,java,ruby-on-rails,database,unit-testing,tdd,Java,Ruby On Rails,Database,Unit Testing,Tdd,在开发Rails应用程序时,我们在开发环境中使用本地数据库,并确保我们的规范作为TDD的一部分通过 在Java中执行TDD时,不使用类似Sqlite的本地数据库是一种规范吗?我被告知,内存数据库(HSQL)是运行单元测试和集成测试所需的一切。这是一种标准做法吗 我们在Rails应用程序中使用Sqlite进行本地开发和运行RSpec。但我的问题是Java开发。我们正在用Java重写应用程序的一部分。我被告知,如果您编写涵盖所有功能的集成测试,则不需要任何数据库进行开发。并且被告知HSQL足以实现这
我们在Rails应用程序中使用Sqlite进行本地开发和运行RSpec。但我的问题是Java开发。我们正在用Java重写应用程序的一部分。我被告知,如果您编写涵盖所有功能的集成测试,则不需要任何数据库进行开发。并且被告知HSQL足以实现这一点。由于我习惯于在Rails中使用用于本地开发的数据库,我想知道以后如何调试任何问题?如果我们能够在本地环境中复制数据和场景,那么分析任何问题都非常有帮助。如果在开发环境中不使用任何数据库,并且完全依赖HSQL进行测试,那么在Java/Spring中如何做到这一点 您的问题的答案是:让您的测试环境数据库尽可能靠近开发环境是很常见的 我想,如果您关注的是性能,那么在考虑使用内存中的数据库之前,还有一些更重要的事情需要改进 通常,在TDD测试时,您只会运行相关的测试,然后运行整个套件以检查您没有破坏任何东西。如果您使用的是Rspec,则可以使用 另一件重要的事情是在每个测试开始时清理数据库,因为测试应该是隔离的,永远不依赖于以前测试的结果。这将改进系统中可能存在的复杂搜索查询。这里有一个可以帮助你的方法
最后,如果您正在使用某种持续集成工具,请记住使用
rakedb:schema:load
而不是rakedb:migrate
来设置它。这将作为单个迁移运行模式文件,而不是每次提交时都运行单个迁移。(请记住控制此版本并始终保持最新)您弄错了术语。TDD通常是关于编写测试用例的。但是大多数时候,在你的问题中,人们会考虑使用TDD进行单元测试
不幸的是,术语并不十分清楚。当你转向时,你会发现(我的话):“你为测试一个软件所做的任何事情”都可以称为单元测试
但这没有帮助。您应该查找以下定义:。主要方面是:单元测试是独立工作的。引用该链接:
在内存中运行(例如,没有数据库或文件访问)
因此:
- 进行单元测试时,不应使用任何数据库
- 当您进行集成测试时,您希望确保您的解决方案“端到端”工作。从这个意义上讲,您可能正在使用数据库的一个特殊实例,但不是另一种数据库李>
界面
s,比如:*存储库
。让SUT与之沟通。然后我编写了一些实现类,让他们实现我创建的接口。类层次结构如下所示:
<<uses>>
SUT ---------------> Repository
^
| <<implement>>
|
|--------|--------|-------|
| | | |
JPA Hibernate JDBC .etc
但是您必须使用数据库编写一些集成测试,以测试在第三方api上运行的每个
存储库
实现。它由Martin调用:。在单元测试中根本不要使用数据库您可以在file:mode而不是mem:mode中使用HSQLDB。您将得到一个可读的.script文件,其中所有DDL和测试数据都作为SQL语句。
repo = mock(Repository.class);
SUT it = new SUT(repository);
when(repo.find(id)).thenReturn(entity);
assert it.exercise() == expectedResult;
assert it.currentState == expectedState;