单元测试子类相互引用

时间:2013-06-07 01:51:55

标签: java unit-testing

在Java中,我有抽象类Place,有两个具体的子类AreaLevel; Level必须有父Area。但是在尝试为Level进行单元测试时,我不想创建一个完整的Area实例。我认为有两种方法可以解决这个问题:

1)创建一个接口IPlace,由接口IArea扩展,PlaceArea实现。然后创建一个实现MockArea的{​​{1}}类,并在测试时将其传递给IArea

2)使用一个模拟框架,它将自动为我创建模拟对象。

哪种方式更好?或者有第三种方法吗?

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。