嘲笑在Clojure中抛出mongoDb异常

时间:2014-12-23 08:01:25

标签: mongodb unit-testing exception clojure mocking

我想覆盖我的函数来抛出com.mongodb.MongoException $ DuplicateKey。但是这个类在它的构造函数中需要一些名为com.mongodb.CommandResult的对象。

问题在于com.mongodb.CommandResult。无论我想做什么,我最终都会:

  

找不到类com.mongodb.CommandResult

的匹配ctor

getConstructors说它没有构造函数。但是,如果我尝试在没有参数的情况下这样做,那就是一样的......有人能指出我做错了什么吗?

我真的很怀疑,但也许这对理解我的问题有点帮助:

user=> (com.mongodb.CommandResult.)

CompilerException java.lang.IllegalArgumentException: No matching ctor found for class
com.mongodb.CommandResult, compiling:(/tmp/form-init5865306652286645706.clj:1:1) 

1 个答案:

答案 0 :(得分:2)

如果getConstructors没有返回任何内容,则表示没有公共构造函数,您无法通过常规方法创建实例。您可以使用getDeclaredConstructors访问非公共构造函数。

在你这样做之前,我会建议另一种方法:将MongoDB客户端包装在一个瘦的自定义包装器中,a)只显示你需要的客户端,b)使用你的域特定的操作名称,c)不用& #39;在其表面上使用任何特定于MongoDB的类型(捕获异常,传播与CommandResult等不同的结果)。在测试中模拟通常要容易得多,可以用来隐藏难以实现的测试API,如果它足够薄,那么不要对包装器本身进行单元测试是相当安全的。集成测试或其他更高级别的自动化测试通常可以非常好地模拟和覆盖这些错误状态。