在Java中,我有抽象类Place
,有两个具体的子类Area
和Level
; Level
必须有父Area
。但是在尝试为Level
进行单元测试时,我不想创建一个完整的Area
实例。我认为有两种方法可以解决这个问题:
1)创建一个接口IPlace
,由接口IArea
扩展,Place
和Area
实现。然后创建一个实现MockArea
的{{1}}类,并在测试时将其传递给IArea
。
2)使用一个模拟框架,它将自动为我创建模拟对象。
哪种方式更好?或者有第三种方法吗?
答案 0 :(得分:0)
你没有告诉我们你不想创建一个完整的Area
的原因,但我们假设它做了一些难以测试的事情,比如连接到数据库或读取文件或其他东西。那些是它的依赖。依赖注入就是答案。
例如,假设Area
在其构造函数中执行此操作:
public Area() {
//get db connection
//do something with db connection
}
现在,当您创建Level
时,它将连接到数据库。以下是如何重写构造函数以使用依赖注入:
public Area(Connection con) {
//do something with db connection
}
现在,当您创建Level
时,您可以假它Connection
并且能够测试您的Level
。
现在,您可以使用模拟框架制作假的Connection
。我推荐Mockito。
答案 1 :(得分:0)
正如你所写,我建议使用一个模拟框架。
依赖注入很棒。使用它可以让您的类以明显的方式陈述他们需要与之交互的类型。如果处理得当,对模拟对象的需求通常是不可避免的。习惯使用模拟框架。我个人喜欢Mockito。