用包装的公共静态方法Java进行单元测试

时间:2016-08-19 15:33:25

标签: java unit-testing

我对单元测试不是很熟悉,我知道它们对于代码质量非常重要,我想在我的项目中写一些。我最近遇到了一些问题。上下文是,我正在为我的Aclass编写testClassA,但是Aclass中的一些函数依赖于BClass。

BClass是一个实用函数,所以它有许多public static函数。 AClass使用Bclass的函数:

public class Aclass{

    public boolean Afunction()
    {
        String result = Bclass.Bfunction();
        //do stuff with result
        return true
    }

}

public class Bclass{

    public static String Bfunction()
    {
        //function code
    }

}

我希望每次调用BClass.Bfunction时,我都可以返回我想要的东西,而不是在Bclass中真正执行真正的Bfunction,所以我的Aclass在我的测试中不依赖于其他类。有可能吗?

1 个答案:

答案 0 :(得分:0)

一种方法将您的更改限制为仅仅Aclass,并消除了对Bclass的依赖(正如您所要求的)是提取和覆盖:

  1. 确定您希望在测试中绕过的代码,然后解压缩到方法。
  2. 覆盖您班级测试的子类中的方法。在这个重叠方法中,您可以编写适合测试的任何模拟行为:
  3. 所以你修改过的Aclass看起来像这样:

    public class Aclass {
        public boolean Afunction() {
             String result = doBfunction();
             // do stuff with result
             return true;
        }
        // This is your "extracted" method.
        protected doBfunction() {
            return Bclass.Bfunction();
        }
    }
    

    并且您的测试类看起来像这样:

    class AClassTest {
    
        @Test
        public void testAFunction() {
             Aclass testObject = new TestableAclass();
             boolean value = testObject.AFunction();
             // now you can assert on the return value
        }
    
        class TestableAclass extends Aclass {
            @Override
            protected String doBfunction() {
                 // Here you can do whatever you want to simulate this method
                 return "some string";  
            }
        }
    }