如何将JUnit4TestAdapter与对象一起使用

时间:2015-07-28 12:06:16

标签: java unit-testing junit junit4

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

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是不方便的。

1 个答案:

答案 0 :(得分:0)

好吧,考虑到JUNIT需要你的测试者的Class对象作为对象工厂(所以他可以创建你的测试人员的几个实例),我只能建议你通过系统将参数传递给你的测试人员属性。

此外,这是传递参数的推荐方式:http://junit.org/faq.html#running_7