【问题标题】:How to test method that uses external package to interact with DB如何测试使用外部包与数据库交互的方法
【发布时间】:2013-05-05 04:24:11
【问题描述】:

我正在尝试测试一个函数,它是 struts 应用程序的业务逻辑层的一部分。我遇到了问题,因为代码依赖于组织范围内使用的 jar 中的外部函数。

public CustomObject getCustomObject(String id){
        CustomObject customObject = new CustomObject();
        QueryObject sql = createSqlStatement(id); // EXTERNAL jar
        Result result = execute(sql); // EXTERNAL jar
        ArrayList list = result.getResulList(); // EXTERNAL jar

        // Logic to use the list object to fill the customObject
        // I can see an error here, that could have been 
        // caught in unit test

            return customObject ;
        }

现在的问题是测试填充对象的逻辑。
我写的Junit4测试是:

    @Test
    public void testCustomObject()  {
        CustomObject customObjectwActual = new CustomObject();
        CustomObject customObjectExpected = new CustomObject();

           // set properties of customObjectExpected here

        customObjectwActual = getCustomObject(id); // Exception here

        assertEquals(customObjectExpected , customObjectwActual );
    }

根据开发人员的解释,抛出异常是因为“在启动 struts 应用程序时加载了外部 jar 类”。我是 Java 和 struts 的新手。我的方法错了吗?有没有办法以某种方式在setUpBeforeClass() 中“加载”这些外部 jar 类?
如果有什么不清楚的地方请告诉我。

编辑 2: 抱歉,我的问题不清楚。我的类路径中有这些外部 jar。它编译得很好,它实际上加载了外部 jar 的类。 SQL 查询存储在一个 xml 文件中。这些外部 jar 也有自己的带有 SQL 语句的 xml 文件。无法加载这两个 xml 文件之一。
此外,即使它们正确加载,我实际上也不想调用数据库。有什么方法可以模拟这些调用吗?

【问题讨论】:

  • 你需要在你的类库中有这些 jar 并导入你的代码所需的类
  • “但是我他们无法加载自己的依赖项”是什么意思?

标签: java unit-testing junit mocking


【解决方案1】:

有没有办法将这些外部 jar 类“加载”到 setUpBeforeClass() 以某种方式?

你只需要在你的类路径中包含这些 jars。当你使用类时,它们会在运行时自动加载

我是 Java 和 struts 的新手。我的方法错了吗?

没有什么是 Struts 特有的。您在项目中使用的外部类的纯核心 java 必须包含在您的类路径中

有什么方法可以模拟这些调用吗?

如果你模拟这些调用,那么编写测试数据库交互的数据库测试用例有什么用

我还建议使用像 eclipse 这样的 IDE,因为它对开发非常有帮助,比如预先提供编译问题、格式化等

【讨论】:

  • 我已经在类路径中有 jars。该项目编译良好。这些类实际上被加载了,但是未能加载它们的内部依赖。
  • 感谢 M Sach 帮助我,很抱歉让我不清楚。以下是更多详细信息: sql 查询是 XML 文件中主要项目的一部分。外部 jar 类确实被加载,但看起来它无法读取项目中的 xml 文件。如果需要更多信息,请告诉我
猜你喜欢
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2010-11-12
  • 2010-09-29
相关资源
最近更新 更多