我需要用Java为Android应用程序编写单元测试。我目前需要做的是创建一个对象图片并将其用于一些测试。这个对象的问题是,它的构造函数有一个方法调用:
public Picture(File imageFile) {
this.filename = imageFile.getName();
this.imageDimension = getImageDimension();
/.../
}
方法getImageDimension()引用了一些其他类,因此我更喜欢可分性,而不是模拟它的结果。为了嘲讽,我需要给Mockito一个构造函数,所以在我看来这就像一个鸡蛋问题。
那么,有机会用Mockito来模拟对象构造函数中使用的函数吗?如果没有,如何在不更改原始代码的情况下解决这种情况?
通常你会模拟整个对象,而不仅仅是它的一部分。但如果它不是最终的,请创建Picture的子类并覆盖构造函数,然后在那里进行自定义操作。这样就可以避免调用原始构造函数,并且可以测试实例。
如果它是最终的,那么单元测试就变得相当困难。如果您实际上并没有对这个特定的类进行单元测试,那么您应该完全模拟图片对象,或者根本不模拟。
顺便说一句,这就是为什么你不应该允许你的构造函数做工作:这会导致代码很难测试&嘲弄将对象初始化与逻辑分离是一件好事。这里可能需要一个额外的构造函数,它将文件名和维度作为构造函数参数。