如何对 Clob 转换为 String 进行单元测试?

How to unit test Clob conversion to String?

这个简单的方法 returns 从数据库检索 Clob 的所有内容作为 String

我怎样才能正确地 test/mock 它,保证它总是 return Clob 参数的全部内容(假设它的大小不会大于一个整数)?

import java.sql.Clob;

public class ClobUtils {

    public static String clobToString(Clob clob) throws Exception {

        if(clob.length() > Integer.MAX_VALUE) {
            throw new Exception("Clob is too big to be handled by the application.");
        }

        // Assumes that Clob content can fit in the String
        return clob.getSubString(1, Long.valueOf(clob.length()).intValue());
    }

}

您不必测试 getSubStringlength。它已经由来自 sun 的人和您的数据库提供商进行了测试。您应该测试的是您是否正确使用了它们。显然你不能通过模拟 clob 来做到这一点,因为你什么都不会测试,或者你必须实现你自己的 jdbc 部分(因此你会测试错误的实现)。

你应该做的是做集成测试。设置你的数据库,用已知数据填充它,运行 ClobUtils 并检查它是否 returns 预期的字符串。是的,设置良好的自动化集成测试并不简单,也不是很容易,但只要付出合理的努力就可以做到。