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

Junit 在方法内声明(或)创建实例变量,junit,Junit,根据我过去几个月在Junit中使用easymock和powermock的经验,我发现当在方法级范围中声明和实例化实例变量时,我们需要求助于powermock框架来对其进行模拟。因此,我可以安全地假设在方法中创建实例变量不是一种好的编程实践。非常感谢您在这方面的宝贵意见。 谢谢 Venkatesh听起来你在描述依赖注入试图解决的问题 如果我有一个像这样的班级比萨饼: class Pizza { private Sauce sauce; // instance variable


根据我过去几个月在Junit中使用easymock和powermock的经验,我发现当在方法级范围中声明和实例化实例变量时,我们需要求助于powermock框架来对其进行模拟。因此,我可以安全地假设在方法中创建实例变量不是一种好的编程实践。非常感谢您在这方面的宝贵意见。
谢谢

Venkatesh

听起来你在描述依赖注入试图解决的问题

如果我有一个像这样的班级比萨饼:

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
}
(其中
saint
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
的具体实现紧密耦合。您现在可以非常轻松地更改实现

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


这是有道理的。但我的问题是在方法范围内声明这些变量并实例化它们。我想知道这是否是正确的做法。这里我有一些遗留应用程序,我们需要对其进行模拟,我们遇到了前面提到的问题,我们不得不求助于使用powermock来处理此类场景。让我知道你的意见。