GWTTestCase:测试私有方法

use*_*612 2 java reflection gwt junit gwttestcase

我是GWT/Java的新手,需要一些关于如何解决这个(似乎应该是)简单问题的想法.

我有一个GWT对象,我正在尝试测试一个私有方法:

public class BarChart extends FlowPanel {

    public BarChart() {
        super();
        privateMethod();
    }

    privateMethod() { 
        //want to test this 
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过JUnit,但它需要是一个GWTTestCase,因为这个对象需要GWT.create(),我尝试过反射但GWTTestCase不支持它.

pfr*_*nza 7

我知道这不是你要找的答案,但单元测试私有方法是不好的形式.

您应该重构代码,以便可以通过公共API测试/观察私有方法的影响.

由于您提供的代码示例很短,因此很难提供特定的策略,但我可以对用例做一些一般性陈述.

测试私有方法的最佳方法是通过另一种公共方法.如果无法执行此操作,则满足下列条件之一:

  1. 私有方法是无法访问(死)代码
  2. 您正在测试的课程附近有一种设计气味; 私有方法应该仍然对类有可观察的影响
  3. 您尝试测试的方法不应该是私有的; 在这种情况下,改变方法的可见性也许是完全可以接受的.

此外,您可以使用GWT UIBinder将UI代码与应用程序逻辑分开.一旦UI被分离出来,您就可以使用JUnit测试来测试剩余的代码.GWTTestcases仅适用于需要GWT.create(...)的类,并且运行速度非常慢(与junit相比),因此最好构造代码,以便大多数测试可以使用junit完成,然后使用gwttestcase覆盖其余部分.如果你可以实现这个结构,那么它开辟了使用easymock/mockito/reflection等测试的额外途径.