2011-02-14 111 views
3

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

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

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

回答

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风格测试,我觉得这一点令人讨厌,但它击败了替代方案。

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(){ 
     } 
    } 
+0

谢谢,但这是我想避免的类型。如果我必须这样做,那么当我知道我需要时,很可能我不想添加额外的测试。 –

+0

我认为你找不到比这更好的解决方案。如果可以的话,我会成为第一个赞成的人。 –

+2

如果您扩展GWTTestCase并重写getModuleName以返回null,则会发现它作为纯java测试运行。 –