Ibatis2 和测试上下文

Posted

技术标签:

【中文标题】Ibatis2 和测试上下文【英文标题】:Ibatis2 and test context 【发布时间】:2009-11-12 17:50:01 【问题描述】:

在我的 Spring 项目中,Ibatis 有一个愚蠢的配置问题。请不要对我说这一切是如何设置的,我只是遵循“内部项目结构政策”。

这是结构,我们有“src/ma​​in/resources/META-INF/”文件夹,其中包含应用程序使用的所有配置文件,然后有一个“src/test/resources/META-INF/”,其中仅包含具有不同设置以运行单元测试的配置文件。

在我们的例子中,这只是一个文件,src/ma​​in/resources/META-INF/spring/application-config.xml 变成了 src /测试/resources/META-INF/spring/test-application-config.xml。我不打算概述两者之间的细微差别,因为那部分工作正常。

test-application-config.xml 导入 src/ma​​in/resources/META-INF/spring/data -access-config.xml 文件就好了,它反过来使用 src/ma​​in/resources/META-INF/ibatis/sqlmap- config.xml 成功...之后就是下地狱的时候了。

到目前为止,我们一直在使用 Spring 在类路径中查找下一个配置文件,但是当我们点击 sqlmap-config.xml 时,我们将 Spring 框架留给了 ibatis 框架,我相信,它加载相对于类路径在其中定义的资源文件(取自文档,无论是什么意思)。

sqlmap-config.xml 中定义了一些我们正在使用的资源文件,它们位于 src/ma​​in/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/ma​​in/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 中设置 &lt;classpathentry kind="src" path="META-INF"/&gt;(这将在 Eclipse 的 Navigator 视图下可见)

【讨论】:

以上是关于Ibatis2 和测试上下文的主要内容,如果未能解决你的问题,请参考以下文章

用 jest 和 react-testing-library 测试反应上下文

Spring Boot 集成测试:@AutoConfigureMockMvc 和上下文缓存

测试气流:具有 DAG 的任务和任务上下文未在 pytest 中运行

SpringBootTest - 如何在测试级别断言上下文不加载和更改属性?

在不创建上下文的情况下禁用 Spring 和 Junit5 测试

上下文操作的 ReSharper SDK 测试不起作用