如何使用JUnit4TestAdapter与对象

问题描述:

我想用JUnit4TestAdapter编写一个使用JUnit4的测试套件。看看code of this class我看到它只能用Class作为输入。我想构建一个测试类并在使用TestSuite运行它之前设置一个参数。不幸的是,Junit4TestAdapter通过使用反射来构建测试(不是100%确定它背后的机制),这意味着我无法在运行时更改我的测试类。 以前有人做过类似的事吗?有没有可能的解决方法来解决这个问题?谢谢你的帮助!如何使用JUnit4TestAdapter与对象

public class SimpleTest { 
    @Test 
    public void testBasic() { 
     TemplateTester tester = new TemplateTester(); 
     ActionIconsTest test = new ActionIconsTest(); 
     test.setParameter("New Param Value"); 
     tester.addTests(test); 
     tester.run(); 
    } 
} 

///// 

public class TemplateTester { 
    private TestSuite suite; 

    public TemplateTester() { 
     suite = new TestSuite(); 
    } 

    public void addTests(TemplateTest... tests) { 
     for (TemplateTest test : tests) { 
      suite.addTest(new JUnit4TestAdapter(test.getClass())); 
     } 
    } 

    public void run() { 
     suite.run(new TestResult()); 
    } 
} 

///// 

public interface TemplateTest { 

} 

///// 

public class ActionIconsTest extends BaseTestStrategy implements TemplateTest { 

    @Test 
    public void icons() { 
     //Test logic here 
    } 

    public void navigateToTestPage() { 
     //Here I need the parameter 
    } 
} 

///// 

public abstract class BaseTestStrategy { 
    protected String parameter; 

    @Before 
    public void init() { 
     navigateToTestPage(); 
    } 

    public abstract void navigateToTestPage(); 

    public void setParameter(String parameter) { 
     this.parameter = parameter; 
    }  
} 

我想用Selenium测试一个Web应用程序。我想测试的方式是分割功能,例如,我想测试可用的图标(ActionIconsTest),然后我想测试其他部分,如按钮等。 这背后的想法是有一个更好的分类在某些屏幕上可用的功能。这与我们正在开发我们的网络应用程序的方式非常相关。

考虑到这一点,TemplateTest只是一个由我的系统中可用的不同类型的测试(ActionIconTest,ButtonTest等)实现的接口。 TemplateTester是一个Junit套件测试,包含实现TemplateTest接口的所有不同测试。

这个问题的原因是因为我试图实现策略模式,然后意识到在运行时将类传递给Junit4TestAdapter不方便。

+0

你能不能给我们说你正在试图解决更大的问题的背景?什么是'TemplateTest'?什么是“ActionIconsTest”?什么是'TemplateTester'用于?为什么'TemplateTester'从JUnit测试中调用,但也使用JUnit类? – NamshubWriter

+0

我在我的问题的底部添加了更新。 – narko

好,同时在帐户JUNIT需要你的测试仪的类对象作为一个对象工厂(这样他就可以创造几个实例测试仪的),我只能建议你传递参数测试仪通过系统属性。

而且,它的传递参数的推荐方法:http://junit.org/faq.html#running_7

+0

感谢您的回复。我添加了一些代码,也许现在更清楚我想实现什么。 – narko