如何模拟对象构造函数中使用的函数(使用Mockito)?

时间:2013-08-13 13:38:27

标签: java junit mockito

我需要用Java为Android应用程序编写单元测试。我目前需要做的是创建一个对象Picture并将其用于某些测试。这个对象的问题是,它的构造函数有一个方法调用:

public Picture(File imageFile) {
    this.filename = imageFile.getName();
    this.imageDimension = getImageDimension();
    /.../
}

方法getImageDimension()引用了一些其他类,因此我更喜欢可分离性来模拟它的结果。对于嘲笑,我需要给Mockito一个构造函数,所以在我看来就像鸡蛋问题。

那么,有没有机会用Mockito模拟对象构造函数中使用的函数?如果不是,如何在不改变原始代码的情况下解决这种情况?

1 个答案:

答案 0 :(得分:1)

通常你会模仿整个对象,而不仅仅是它的一部分。但如果它不是最终的,请创建Picture的子类并覆盖构造函数并在那里执行自定义操作。这样您就可以避免调用原始构造函数,并且可以测试实例。

如果它是最终的,那么单元测试变得相当困难。如果你实际上没有对这个特定类进行单元测试,你应该完全模拟图片对象,或者根本不模拟图片对象。

顺便说一句,这就是为什么你不应该允许你的构造函数做的工作:它导致代码难以测试和嘲笑。将对象初始化与逻辑分离是一件好事。可能你想要的是一个额外的构造函数,它将文件名和维度作为构造函数args。