在GWTTestCase中运行当前Junit测试

时间:2011-02-14 03:26:12

标签: gwt junit tdd

我有一个JUnit测试,我在一个类上运行,但我最近为GWT编写了一个模拟版本。由于规范是相同的,我想使用相同的测试用例,但我希望它在GWT环境中运行,这通常可以通过扩展GWTTestCase来实现。

我真的想避免任何复制/粘贴废话,因为将来可能会增加测试,我不应该为以后的复制负担。

如何导入/继承我的标准单元测试以作为常规测试用例或GWT测试用例运行?

2 个答案:

答案 0 :(得分:6)

我找到了解决这个问题的方法。

如果使用GWTTestCase扩展原始测试,则可以覆盖getModuleName以返回null。这告诉GWTTestCase作为普通的纯java测试运行(根本没有翻译)。

然后,您可以使用覆盖getModuleName的测试用例来扩展此测试用例以返回模块名称,并且将使用翻译运行相同的测试。

基本上:

public class RegularTest extends GWTTestCase {

  @Override
  public String getModuleName() { return null; }

  public void testIt() {...}

}

......和GWT版本......

public class GwtTest extends RegularTest {

  @Override
  public String getModuleName() { return "some.module"; }

}

这样做的缺点是它迫使你使用JUnit3样式测试,我发现这有点令人讨厌,但它胜过替代方案。

答案 1 :(得分:0)

我认为没有简单的方法..但是你可以提取你的junit测试接口,gwt测试用例和junit测试用例实现这个接口。您可以创建第三个类来实现,gwt测试用例和junit测试的所有测试调用方法都被委托给这个实现类。

public interface IRegularTest {
       public void testSomething();
       public void testSomething2();
}

public class RegularTestImpl implements IRegularTest {

      public void testSomething(){
         // actual test code
      }

      public void testSomething2(){
         // actual test code
      }

}

public class RegularTest extends TestCase implements IRegularTest {
      IRegularTest impl = new RegularTestImpl();

      public void testSomething(){
           impl.testSomething   
      }

      public void testSomething2(){
      }
}


public class GwtTest extends TestCase implements IRegularTest {
      IRegularTest impl = new RegularTestImpl();

      public void testSomething(){
           impl.testSomething   
      }

      public void testSomething2(){
      }
  }