Ibatis2 和测试上下文
Posted
技术标签:
【中文标题】Ibatis2 和测试上下文【英文标题】:Ibatis2 and test context 【发布时间】:2009-11-12 17:50:01 【问题描述】:在我的 Spring 项目中,Ibatis 有一个愚蠢的配置问题。请不要对我说这一切是如何设置的,我只是遵循“内部项目结构政策”。
这是结构,我们有“src/main/resources/META-INF/”文件夹,其中包含应用程序使用的所有配置文件,然后有一个“src/test/resources/META-INF/”,其中仅包含具有不同设置以运行单元测试的配置文件。
在我们的例子中,这只是一个文件,src/main/resources/META-INF/spring/application-config.xml 变成了 src /测试/resources/META-INF/spring/test-application-config.xml。我不打算概述两者之间的细微差别,因为那部分工作正常。
test-application-config.xml 导入 src/main/resources/META-INF/spring/data -access-config.xml 文件就好了,它反过来使用 src/main/resources/META-INF/ibatis/sqlmap- config.xml 成功...之后就是下地狱的时候了。
到目前为止,我们一直在使用 Spring 在类路径中查找下一个配置文件,但是当我们点击 sqlmap-config.xml 时,我们将 Spring 框架留给了 ibatis 框架,我相信,它加载相对于类路径在其中定义的资源文件(取自文档,无论是什么意思)。
在 sqlmap-config.xml 中定义了一些我们正在使用的资源文件,它们位于 src/main/resources/META-INF /ibatis/mapping 文件夹。 它们是这样引用的:
<sqlMapConfig><sqlMap resource="/META-INF/ibatis/mapping/MyObject.xml"/></sqlMapConfig>
当我正常运行应用程序时效果很好,但是当我运行我的 JUnit 测试用例时,我得到一个 IO 异常,指出它找不到文件 /META-INF/ibatis/mapping/MyObject.xml .
我尝试将 sqlmap-config.xml 中的路径更改为“mapping/MyObject.xml”,但这并没有帮助。我也尝试使用 Spring 类路径前缀“classpath:META-INF/ibatis/mapping/MyObject.xml”,也没有用。
任何人都知道如何正确设置 Ibatis 以使其适用于应用程序和 junit?
谢谢。
【问题讨论】:
【参考方案1】:为了解决这个问题,我从 src/test/resources/META-INF 文件夹中删除了所有的 Ibatis 文件和文件夹。
src/main/resources/META-INF/ibatis/mapping 文件中的 sqlmap-config.xml 现在映射如下:
<sqlMapConfig><sqlMap resource="META-INF/ibatis/mapping/MyObject.xml"/></sqlMapConfig>
请注意,与我最初的帖子相比,前导“/”消失了……我认为这就是这里的不同之处。
希望这对遇到类似问题的人有所帮助。
【讨论】:
【参考方案2】:只是看看你所说的是否真的是问题..你可能想把你的映射(MyObject.xml)放在与 sqlmap-config.xml 相同的文件夹中。我这样说是因为我遇到了相当多的 spring + ibatis + 单元测试问题。 (请参阅我提出的已解决的question)
此外,您可能会遇到 IO 异常,因为映射文件在容器外部不存在(当您运行测试时)。
您还应该发布从 SqlMapClientFactoryBean
创建的 bean 的定义。这应该具有包含 sqlMapConfig xml 路径的 configLocation 属性
【讨论】:
【参考方案3】:我遇到了同样的问题,但找不到(快速)解决方案来解释究竟可能出了什么问题。因此我的回答。
正如Spring documentation for Ibatis 所说:
请记住,iBATIS 从类路径加载资源,因此请确保 将“Account.xml”文件添加到类路径中。
在您的情况下,通过将 META-INF
添加到您的 web 项目构建路径,即,如果您使用 Eclipse,请在您的项目的 .classpath
中设置 <classpathentry kind="src" path="META-INF"/>
(这将在 Eclipse 的 Navigator 视图下可见)
【讨论】:
以上是关于Ibatis2 和测试上下文的主要内容,如果未能解决你的问题,请参考以下文章
用 jest 和 react-testing-library 测试反应上下文
Spring Boot 集成测试:@AutoConfigureMockMvc 和上下文缓存
测试气流:具有 DAG 的任务和任务上下文未在 pytest 中运行
SpringBootTest - 如何在测试级别断言上下文不加载和更改属性?