Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有本地数据库的TDD?_Java_Ruby On Rails_Database_Unit Testing_Tdd - Fatal编程技术网

Java 没有本地数据库的TDD?

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应用程序时,我们在开发环境中使用本地数据库,并确保我们的规范作为TDD的一部分通过

在Java中执行TDD时,不使用类似Sqlite的本地数据库是一种规范吗?我被告知,内存数据库(HSQL)是运行单元测试和集成测试所需的一切。这是一种标准做法吗


我们在Rails应用程序中使用Sqlite进行本地开发和运行RSpec。但我的问题是Java开发。我们正在用Java重写应用程序的一部分。我被告知,如果您编写涵盖所有功能的集成测试,则不需要任何数据库进行开发。并且被告知HSQL足以实现这一点。由于我习惯于在Rails中使用用于本地开发的数据库,我想知道以后如何调试任何问题?如果我们能够在本地环境中复制数据和场景,那么分析任何问题都非常有帮助。如果在开发环境中不使用任何数据库,并且完全依赖HSQL进行测试,那么在Java/Spring中如何做到这一点

您的问题的答案是:让您的测试环境数据库尽可能靠近开发环境是很常见的

我想,如果您关注的是性能,那么在考虑使用内存中的数据库之前,还有一些更重要的事情需要改进

通常,在TDD测试时,您只会运行相关的测试,然后运行整个套件以检查您没有破坏任何东西。如果您使用的是Rspec,则可以使用

另一件重要的事情是在每个测试开始时清理数据库,因为测试应该是隔离的,永远不依赖于以前测试的结果。这将改进系统中可能存在的复杂搜索查询。这里有一个可以帮助你的方法


最后,如果您正在使用某种持续集成工具,请记住使用
rakedb:schema:load
而不是
rakedb:migrate
来设置它。这将作为单个迁移运行模式文件,而不是每次提交时都运行单个迁移。(请记住控制此版本并始终保持最新)

您弄错了术语。TDD通常是关于编写测试用例的。但是大多数时候,在你的问题中,人们会考虑使用TDD进行单元测试

不幸的是,术语并不十分清楚。当你转向时,你会发现(我的话):“你为测试一个软件所做的任何事情”都可以称为单元测试

但这没有帮助。您应该查找以下定义:。主要方面是:单元测试是独立工作的。引用该链接:

在内存中运行(例如,没有数据库或文件访问)

因此:

  • 进行单元测试时,不应使用任何数据库
  • 当您进行集成测试时,您希望确保您的解决方案“端到端”工作。从这个意义上讲,您可能正在使用数据库的一个特殊实例,但不是另一种数据库
对我来说,我从不使用任何数据库(包括HSQLDB)来编写单元测试

我更喜欢创建一些
界面
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;