根据我在过去几个月中使用easymock和powermock与Junit的经验,我看到当在方法级范围内声明和实例化实例变量时,我们需要求助于powermock框架来模拟它。因此,我可以安全地假设在方法中创建实例变量不是一个好的编程习惯。非常感谢您在这方面的宝贵意见
由于
卡塔斯
答案 0 :(得分:0)
听起来您正在描述依赖注入试图解决的问题。
如果我有一个类似于披萨的课程:
class Pizza {
private Sauce sauce; // instance variable
private Cheese cheese; // instance variable
public Pizza() {
sauce = new TomatoSauce(); // instantiate instance variable in constructor
cheese = new BlueCheese(); // ... or in a method
}
// ...other stuff
}
(其中Sauce
和Cheese
是TomatoSauce
和BlueCheese
实施的接口
然后你是对的,这很难在没有嘲笑的情况下进行单元测试。但更糟,您的Pizza课程紧紧依赖于具体的实施BlueCheese
和TomatoSauce
,这使得以后很难修改。
如果你注入实例变量的值,你不仅不需要模拟,你的代码就会变得紧密耦合。例如;
class Pizza {
private Sauce sauce;
private Cheese cheese;
public Pizza(Sauce sauce, Cheese cheese) {
this.sauce = sauce;
this.cheese = cheese;
}
// ...other stuff
}
一个;这样就无需模拟Sauce
和Cheese
变量,这也意味着您的Pizza
类与Sauce
和Cheese
的具体实现不紧密耦合。您现在可以非常轻松地更改实施。
因此,在第一个示例中设置实例变量不被视为良好实践
http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html