【发布时间】:2011-02-14 03:26:12
【问题描述】:
我有一个在一个类上运行的 JUnit 测试,但我最近为 GWT 编写了一个模拟版本。由于规范相同,所以我想使用相同的测试用例,但我希望它在 GWT 环境中运行,这通常通过扩展 GWTTestCase 来完成。
我真的很想避免任何复制/粘贴的废话,因为将来可能会添加测试,我不应该在以后复制的负担。
如何导入/继承我的标准单元测试以作为常规测试用例或 GWT 测试用例运行?
【问题讨论】:
我有一个在一个类上运行的 JUnit 测试,但我最近为 GWT 编写了一个模拟版本。由于规范相同,所以我想使用相同的测试用例,但我希望它在 GWT 环境中运行,这通常通过扩展 GWTTestCase 来完成。
我真的很想避免任何复制/粘贴的废话,因为将来可能会添加测试,我不应该在以后复制的负担。
如何导入/继承我的标准单元测试以作为常规测试用例或 GWT 测试用例运行?
【问题讨论】:
我已经找到了解决这个问题的方法。
如果您使用 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 样式测试,我觉得这有点烦人,但它胜过其他选择。
【讨论】:
我认为没有简单的方法..但是你可以提取你的junit测试的接口,gwt测试用例和junit测试用例实现这个接口。可以创建第三个实现类,gwt测试用例和junit test的所有测试调用方法都委托给这个实现类。
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(){
}
}
【讨论】: