Junit测试的最佳实践是什么:具有数据库访问权限的公共方法,或公开私有方法

时间:2015-02-18 15:51:33

标签: java junit

我正在使用JunitTesting测试一个类似于下面示例的类。

 public RandomObject MainMethod(int id) {
       RandomObject o = dBconn.getRandomObject(id);
       subMethod(o);

       //also calling other private methods here

       return o;

 }

 private subMethod(RandomObject o) {
        //Do something random here

 }

我有三个选择:

  1. 只测试我的MainMethod(),但是我必须通过将DB值硬编码到我的测试中来访问DB。
  2. 我可以避免测试MainMethod()并只测试subMethod,但是我必须公开我的私有方法。
  3. 同时执行1和2。
  4. 什么是最佳做法?

2 个答案:

答案 0 :(得分:1)

执行JUnit测试时的最佳做法是在与您正在测试的类相同的包下编写JUnit测试。如果您这样做,您可以使用package可见性保持您的方法,并仍然测试它们。如果未指定privateprotectedpublic等可见性修饰符,则包可见性是方法的默认可见性。

答案 1 :(得分:1)

我想到了一些选择。

我曾参与过使用实用程序方法的项目,以便通过反射执行私有方法是首选。

在其他项目中,我发现某些开发人员将subMethod的访问修饰符更改为protected。然后,在测试类中,定义内部类继承您正在测试的类。然后,此外观可以定义您可以在测试中调用的公共方法。类似的东西:

private class RandomObjectFacade extends RandomObject {

    public void subMethodFacade(RandomObject o){
         super.subMethod(o);
    } 
}

这取决于你认为最好的。无论您是想忍受反射的脆弱/性能损失还是对现有代码进行小的,侵入性的更改 - 更改访问修饰符可能不适合您的场景。