如何测试使用外部包与DB交互的方法

时间:2013-05-05 04:24:12

标签: java unit-testing junit mocking

我正在尝试测试一个函数,它是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的类。 SQL查询存储在xml文件中。这些外部jar也有自己的带有SQL语句的xml文件。它无法加载这两个xml文件中的一个。
此外,即使它们正确加载,我实际上也不想调用数据库。有没有办法模拟这些电话?

1 个答案:

答案 0 :(得分:1)

  

有没有办法去加载"这些外部jar类   setUpBeforeClass()在某种程度上?

您只需要在类路径中包含这些jar。使用时,类会在运行时自动加载

  

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

Struts没有任何特定内容。您在项目中使用的外部类的普通核心java必须包含在类路径中

  

有没有办法模拟这些电话?

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

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