声明(OR)在方法内创建实例变量

时间:2014-04-29 12:54:56

标签: junit


根据我在过去几个月中使用easymock和powermock与Junit的经验,我看到当在方法级范围内声明和实例化实例变量时,我们需要求助于powermock框架来模拟它。因此,我可以安全地假设在方法中创建实例变量不是一个好的编程习惯。非常感谢您在这方面的宝贵意见 由于
卡塔斯

1 个答案:

答案 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
}

(其中SauceCheeseTomatoSauceBlueCheese实施的接口

然后你是对的,这很难在没有嘲笑的情况下进行单元测试。但更糟,您的Pizza课程紧紧依赖于具体的实施BlueCheeseTomatoSauce,这使得以后很难修改。

如果你注入实例变量的值,你不仅不需要模拟,你的代码就会变得紧密耦合。例如;

class Pizza {
    private Sauce sauce;        
    private Cheese cheese;      
    public Pizza(Sauce sauce, Cheese cheese) {
        this.sauce = sauce;
        this.cheese = cheese;     
    }
    // ...other stuff
}

一个;这样就无需模拟SauceCheese变量,这也意味着您的Pizza类与SauceCheese的具体实现不紧密耦合。您现在可以非常轻松地更改实施。

因此,在第一个示例中设置实例变量不被视为良好实践

http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html