如何对 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());
}
}
您不必测试 getSubString
或 length
。它已经由来自 sun 的人和您的数据库提供商进行了测试。您应该测试的是您是否正确使用了它们。显然你不能通过模拟 clob 来做到这一点,因为你什么都不会测试,或者你必须实现你自己的 jdbc 部分(因此你会测试错误的实现)。
你应该做的是做集成测试。设置你的数据库,用已知数据填充它,运行 ClobUtils 并检查它是否 returns 预期的字符串。是的,设置良好的自动化集成测试并不简单,也不是很容易,但只要付出合理的努力就可以做到。
这个简单的方法 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());
}
}
您不必测试 getSubString
或 length
。它已经由来自 sun 的人和您的数据库提供商进行了测试。您应该测试的是您是否正确使用了它们。显然你不能通过模拟 clob 来做到这一点,因为你什么都不会测试,或者你必须实现你自己的 jdbc 部分(因此你会测试错误的实现)。
你应该做的是做集成测试。设置你的数据库,用已知数据填充它,运行 ClobUtils 并检查它是否 returns 预期的字符串。是的,设置良好的自动化集成测试并不简单,也不是很容易,但只要付出合理的努力就可以做到。