我遇到了一个在开发过程中耗费大量时间的问题我必须测试一些我放在DAO中的HQL,但我不得不重新编译eclipse中的所有项目并放入tomcat,这需要40-60秒再次开始,如果出现问题......再次重新部署......
那么,有一种方法可以在不重新编译所有内容的情况下测试HQL吗?就像我尝试了hibernate工具插件但我没有看到如何使用注释(项目全部带注释,不使用hbm文件......)
由于
答案 0 :(得分:1)
在需要的地方设置断点,在“显示”窗口中调试并在运行时编写任何HQL查询。
也许有帮助。
答案 1 :(得分:1)
假设您通过服务访问DAO,我会这样做:
public static void main(String[] args) {
AbstractApplicationContext factory = new ClassPathXmlApplicationContext("application-context.xml");
YourService yourservice = (YourService)factory.getBean("YourService");
YourObject obj = new YourObject("data1", "data2");
yourservice.save(obj);
YourObject foundobj = yourservice.load(1); // or yourservice.findObjectByLabel("label")
System.out.print(foundobj);
}
或者写一个junit测试。 http://www.springbyexample.org/examples/simple-spring-transactional-junit4-test-code-example.html
答案 2 :(得分:1)
我会选择Vaelyr提到的调试选项以满足准时需求。 如果您需要更强的断言,我宁愿为tshenolo提出的DAO编写一些测试。
但是如果你有时间想要一个漂亮的玩具可以玩,我会创建一个控制台页面,让你与你的应用程序进行交互。
为此,我将使用groovy(或其他脚本语言)解释器。如果您将DAO或任何其他相关对象提供给解释器上下文,那么您将拥有一个控制台来执行所有类型的实验,而无需重新编译任何内容。
您将能够在您的应用中运行任意代码!
有关groovy的示例,您可以在此处查看:Embedding Groovy,更准确地说:Embedding a Groovy Console in a Java Server Application
如果你不想使用groovy,你也可以使用beanshell(纯java)或rhino(javascript)或JVM支持的任何其他脚本语言。
请注意,拥有此类控制台是您应用的后门,并且您不应将其作为应用程序的一部分发布。
答案 3 :(得分:0)
我过去为测试HQL所做的是使用内存数据库(如Hypersonic和Spring JUnit test extensions编写一组有限的集成测试。 This post描述了如何使用dbunit完成此操作。您还可以在设置中使用批处理JDBC操作来强制数据,并拆除。
注意事项:我不会将这些测试添加到您的单元测试套件中,因为数据设置和拆卸可能比典型的单元测试花费更多时间。这些实际上是用于将您添加到HQL的开发和调试中的集成测试。我不打算使用这些类型的测试来测试CRUD操作,因为那时你只是集成测试你应该已经完成的ORM框架。