我有servlet,域对象,一些ORM库。我想单元测试java web应用程序的决策逻辑(外观)。
我不想在单元测试中使用DB。我想尽可能少地使用模拟对象。
我应该使用什么方法?什么库/框架解决了这个问题并且很好地记录了?
答案 0 :(得分:3)
如果您想 unit 测试,您需要模拟系统的部分或使用实际的数据库。否则,您只需编写一个没有模拟的集成测试,并在实时系统上运行您的方案。
你可以做几件事:
Arquillian对于集成测试非常酷,您可以在其中实际引导您的应用,因此这里没有模拟。如果您遵循一些标准的Java EE模式/技术
DbUnit +内存中的一些数据库 - 我知道你说你不想使用数据库但是相信我有时候测试实际的东西是个好主意。使用DBUnit,您可以轻松地预先填充它,并使用内存数据库,它将非常快速(已经提到的H2很好,在我以前的工作中我们使用SQLite)。除非您正在测试数据库层,否则在技术上不适用于单元测试。
对于其他典型的单元测试,常见的JUnit,Mockito,AssertJ,Jukito(如果您使用的是番石榴)是不错的补充
我猜您需要选择模拟或使用数据库,行为必须来自某个地方。
那些将是基于Java的框架。除此之外,有几个基于Javascript的框架会戳你的网站,但那些也是集成测试。
@Edit:我个人会这样做:内存数据库+ dbunit用于测试数据库层,模拟其他所有内容,因为你应该相当确定数据库层是否正常工作。
答案 1 :(得分:0)