如何对使用全局变量的函数进行单元测试?

How to unit-test function that uses global variable?

假设你有一个 class

class NeedToTestThisClass{
    private String string1;
    ....
    ....

    private void needToTestThisMethod(){
        if(string1.equals("a")){
            ...
        }
        else{
            ....
            }
   }
}

如何使用不同的字符串值测试此方法?该字符串没有 setter,并且不包含在构造函数中。我无法更改代码。 我有 powermock。 题很简单,就是想不通。谢谢。

通常,这些类型的场景是通过测试实际使用这些私有方法的 public 方法来测试的。通常尝试测试改变 string1 变量的流程,然后您的私有方法会被测试触及。

可以使用PowerMock绕过封装

@Test
public void test() {
     NeedToTestThisClass tested = new NeedToTestThisClass();
     WhiteBox.setInternalState(tested,"string1", "someValue");
     Whitebox.invokeMethod(tested, "needToTestThisMethod");
     //here verify something
}