针对 HSQLDB 测试 DAO 的 Spring/Hibernate/Junit 示例

2024-03-21

我正在努力尝试实施JUnit测试以检查 DAO 的功能。 (DAO 将创建/读取基本的对象/表关系)。

我遇到的麻烦是 DAO(对于非测试代码)的持久性是通过内部解决方案完成的春季/休眠,这消除了通常的*.hbm.xml我发现的大多数示例都包含模板。

因此,我在理解如何设置JUnit测试实现 DAO 以创建/读取(只是非常基本的功能)到内存中HSQLDB。我找到了一些示例,但是内部持久性的使用意味着我无法扩展示例中显示的某些类(我似乎无法正确获取 application-context.xml 设置)。

任何人都可以建议我可以查看的任何项目/示例(或任何文档),以进一步了解实现此测试功能的最佳方法吗?我觉得这应该非常简单,但在实现我找到的示例时我不断遇到问题。

edit:

对于任何需要帮助的人来说,这是我的解决方案,以提高可读性:

  • My TestClass:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:applicationContextTest-Example.xml")
    @Transactional
    public class ExampleDaoTest extends AbstractTransactionalJUnit4SpringContextTests {
        @Resource(name = "sessionFactory")
        private SessionFactory exampleSessionFactory;
    
        @Resource(name = "exampleDao")
        private ExampleDao exampleDao;
    
  • My applicationContext.xml file:

    <!-- List of Daos to be tested -->
    <bean id="exampleDao" class="org.myExample.ExampleDao"/>
    
    <!-- Datasource -->
    <bean id="example_dataSource"
          class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:mem:ExampleTest"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>
    
    <!-- Session Factory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="example_dataSource"/>
        <property name="annotatedClasses">
            <list>
                <value>org.myExample.ExampleClass</value>
            </list>
        </property>
        <property name="hibernateProperties">
            .... left to user to choose properties
        </property>
    </bean>
    

Spring 3 提供了一个新的jdbc命名空间,包括对嵌入式数据库(包括 HSQLDB)的支持。这样就解决了那部分。

我想知道“内部解决方案”可能是什么。您可以使用注释(JPA 或 Hibernate 注释)来 ORM 您的域对象,那么为什么需要“内部解决方案”呢?例如。:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    p:dataSource-ref="dataSource"
    p:packagesToScan="myapp.model" />

至于实现测试,请使用 Spring 的 TestContext 框架。测试可以如下所示(我再次假设下面是 Spring 3,尽管只需将 @Inject 更改为 @Autowired 就可以在 Spring 2.5 中工作):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
    "/beans-datasource-it.xml",
    "/beans-dao.xml",
    "/beans-service.xml",
    "/beans-web.xml" })
@Transactional
public class ContactControllerIT {
    @Inject private ContactController controller;

    ... setUp() and tearDown() ...

    @Test
    public void testGetContact() {
        String viewName = controller.getContact(request, 1L, model);

        ... assertions ...
    }
}

你可以把嵌入式数据库放在里面beans-datasource-it.xml, 例如。 (这里的“it”代表集成测试,文件位于类路径中。)此示例中的控制器位于beans-web.xml,并将被自动连接到ContactController field.

这只是要做的事情的概述,但希望它足以帮助您开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

针对 HSQLDB 测试 DAO 的 Spring/Hibernate/Junit 示例 的相关文章

  • @NotNull.List 的目的

    当我查看标准时限制条件 http docs oracle com javaee 6 api javax validation constraints package summary html在 Bean Validation API JSR
  • PrintStream是有缓冲的,但是flush不会降低性能,而BufferedOutputStream会加速性能

    我预计由于 PrintStream 是缓冲的 通过在每次 print 之后添加刷新操作 速度性能应该会显着降低 但事实并非如此 如下面的代码片段所示 此外 将 PrintStream 包裹在 BufferedOutputStream 周围可
  • 在 JSP 中对表单操作使用相对路径

    如何在表单操作中使用相对路径
  • 如何将 wsdl 内部架构设置为 Jaxb2Marshaller 以验证我所做的每篇文章?

    我正在使用 SOAP Web 服务 在调用它之前我必须验证每个 xml 帖子 所以我正在使用 The CXF codegen 插件生成POJO树结构 第三部分 wsdl xxxx soap service wsdl 一个类实现Web服务网关
  • Keycloak 社交登录 REST API

    我已经为我的 keycloak 实例启用了谷歌社交登录 但我需要将其用作休息服务 是否有可用于执行此操作的端点 Keycloak 中没有 Google 身份验证 API 但您可以使用以下方法解决它代币交换 https www keycloa
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 为什么 Java 中的 hashCode() 可以对不同对象返回相同的值?

    引用我正在读的书中的一段话首先Java http www amazon co uk Head First Java Kathy Sierra dp 0596009208 关键是 哈希码可以相同 但不一定保证对象相等 因为使用的 哈希算法 h
  • Spring @Value 添加验证小于

    我使用以下属性值注入 我如何向此操作添加小于验证 我的意思是我想设置一个验证user maxpassiveday可以说 财产价值不得低于 100 Value user maxpassiveday int maxpassiveday 使用Sp
  • 用于测试的嵌入式 H2 数据库的 Spring 配置

    使用 Spring 进行集成测试的配置是什么样的 嵌入式 h2 数据源 http www h2database com html main html以及可选的 JUnit 我第一次尝试单连接数据源 http static springsou
  • 如何使用 UUID 生成唯一的正 Long

    我需要为我的数据库主键列生成唯一的长 ID 我以为我可以用UUID randomUUID getMostSignificantBits 但有时它也会产生一些负多头 这对我来说是个问题 是否可以从 UUID 中仅生成正长 将会有数十亿个条目
  • 迁移到 Hibernate 5.x

    我正在将我的应用程序从 Hibernate 3 迁移到 Hibernate 5 我们正在使用DatabaseMetadata类获得TableMetadata 因此使用TableMetadata对象获取数据库表列信息 如列大小 类型等 似乎在
  • 在openjdk:7-jre-alpine docker上如何安装python 3.6

    直到大约一周前 我才在 java 图像上成功使用 python 3 6 脚本 如下所示 FROM openjdk 7 jre alpine RUN apk update apk upgrade apk add no cache bash a
  • 使用 spring-data-cassandra 的用户定义类型

    我希望创建如下模型 如何在 spring data cassandra 中使用用户定义的类型 email email protected cdn cgi l email protection name fname First lname L
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • Spring Boot:在映射级别指定端口

    Spring Boot 我希望实现以下目标 一些 URL 路径映射到一个端口 一些映射到另一个端口 换句话说 我想要这样的东西 public class Controller1 RequestMapping value path1 port
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152
  • 如何将多部分文件从另一个服务发送到一个服务

    我有两个端点 api 它们是 uploadand 重定向 upload是我直接上传文件的地方 重定向是我接收文件并将其传递给上传并获取 JSON 响应的地方 upload 所以下面是我的代码 package com example impo
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • 对 Java 协议缓冲区对象进行一些小更改

    我想在 Java 协议缓冲区对象树的深处进行一个小更改 我可以使用 getBuilder 方法来创建一个新对象 该新对象是旧对象的克隆并进行一些更改 当深入完成此操作时 代码会变得丑陋 Quux Builder quuxBuilder fo
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • React js onclick 地图函数中的切换类

    如何处理映射列表 dom 中的切换类 onclick 函数 this state data map function el i var className self state condition list row active inact
  • 将变量数组转换为字符串

    我正在尝试使用 vba 将变量数组转换为字符串 我尝试了两种方法 但都不起作用 它们似乎都在同一点上阻塞 Dim cell As Range Dim val As Variant For Each cell In Range packing
  • 将 JavaScript 类导入另一个类时出现意外的标识符 {classname}

    我正在使用 Node v10 11 0 并从 Ubuntu 18 04 运行此脚本 我的文件设置如下所示 main js import Login from Login mjs class Main constructor const lo
  • 将:click 事件传递到动态创建的

    我基本上需要能够触发一个或多个组件中的某些内容 即 当父级中的图标 按钮时通过 svelte component 动态添加 单击组件 例如我需要挂钩下面用 表示的部分 each charts as chart i div class wra
  • 具有链接时代码生成功能的 MSVC 能否跨 C 和 C++ 进行优化?

    If 链接时代码生成 LTCG https learn microsoft com en us cpp build reference ltcg link time code generation与 MSVC 一起使用时 是否可以跨 C 和
  • 使用 Facebook Graph API 和 HybridAuth 获取好友位置

    Problem 我想得到friends location来自 Facebook Graph API 我正在使用以下方式访问 API混合认证 http hybridauth sourceforge net 框架 如何返回朋友的位置 家乡等 我
  • 带箭头刻度的 Matplotlib 曲线

    我想知道是否可以绘制一条曲线matplotlib带有箭头刻度 就像是 from pylab import y linspace 0 10 0 01 x cos y plot x y gt 应该有这样的曲线 gt gt gt 当 x 增加时
  • JPA 检查实体是否可以删除

    如何检查JPA中的实体是否可以删除并且不会抛出数据完整性异常 我想到的唯一方法是一一检查所有引用的实体 或者尝试在事务中删除然后回滚 但是还有其他更简单的方法吗 如果 可以删除 的意思是 如果实体存在于持久性上下文中 那么您已经回答了您的问
  • iPhone ASIHTTP - 区分 API 调用?

    我目前有一个视图控制器 它实现 ASIHTTP 来处理 API 调用 我的视图控制器触发了 2 个单独的调用 我需要能够区分 requestFinished ASIHTTPRequest request 方法中的两个调用 这样我就可以相应地
  • AWS Step Functions:使用 JsonPath 过滤数组

    我需要在 AWS Step Functions 状态下过滤数组 这似乎是我应该可以使用 JsonPath 轻松实现的目标 但由于某种原因我正在努力 我想要处理的状态如下所示 items id A id B id C 我想通过删除其中的条目来
  • 将表数据存储到 jquery 变量

    我想将表中的数据存储到 jquery 变量中 我使用的代码如下 但此代码将所有表标签 如 tr td 和所有内容 存储到变量中 因为我只需要将数据存储在 td 中以文本格式标记到 jquery 变量 有人可以帮忙吗 var table my
  • 检查 Firebase 实时数据库中是否已存在用户

    我得到了亚历克斯 马莫的解决方案 https stackoverflow com a 47893879 4176989为了检查我的数据库中是否存在唯一值 但快照始终为空 解决方案在这里 DatabaseReference rootRef F
  • WebConfigurationManager.AppSettings 的缓存?

    我有很多读取我的 Web 配置文件的请求 variable WebConfigurationManager AppSettings BLAH Do WebConfigurationManager AppSettings每次都从磁盘读取 还是
  • Go中从IP地址获取域名

    我正在尝试从 IP 地址解析主机名 这显然比我想象的更具挑战性 我尝试过使用几个函数 包括net LookupHost方法 但它们似乎都只是返回我输入的IP地址 这是我正在使用的代码 package main import fmt net
  • 作用域 bean:将一个 bean 注入另一个 bean

    如何在没有代理的情况下将会话范围 bean 注入另一个会话范围 bean Component Scope session class Foo Inject Bar bar Component Scope session class Bar
  • 如何在Python中浏览内存中的sqlite数据库

    我需要使用内存中的 sqlite 数据库和以下构造函数 db sqlite3 connect memory 但在调试时 我发现它非常不方便 因为与基于文件的数据库不同 我无法在调试器中浏览数据库 有没有办法即时浏览这个数据库 您可以在调试器
  • 在反应性香蕉中进行测试

    有没有办法对用反应性香蕉创建的网络进行单元测试 假设我已经使用一些输入事件建立了一些网络 是否可以验证事件已产生一些输出流 行为在一定数量的输入事件之后具有一定的价值 这样做有意义吗 我注意到有各种interpret 功能 但似乎无法弄清楚
  • IE8 中的 JavaScript 事件原型

    我正在尝试向事件原型添加一个方法 为了呼叫 设置preventDefault 或者 用 IE 来说returnValue false以及 如果需要的话 stopPropagation cancelBubble true 我认为下面的代码就足
  • Pig - 使用正则表达式解析字符串

    我被困在 Pig 中的字符串解析上 我查看了周围的文档regex extract and regex extract all并希望使用其中一项功能 我有文件 logs test log cat logs test log user 2425
  • 针对 HSQLDB 测试 DAO 的 Spring/Hibernate/Junit 示例

    我正在努力尝试实施JUnit测试以检查 DAO 的功能 DAO 将创建 读取基本的对象 表关系 我遇到的麻烦是 DAO 对于非测试代码 的持久性是通过内部解决方案完成的春季 休眠 这消除了通常的 hbm xml我发现的大多数示例都包含模板