当前位置: 代码迷 >> java >> 如何将JUnit4TestAdapter与对象一起使用
  详细解决方案

如何将JUnit4TestAdapter与对象一起使用

热度:109   发布时间:2023-08-04 09:33:55.0

我试图依靠JUnit4TestAdapter使用JUnit4编写测试套件。 看一下的我发现它仅适用于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),然后我想测试其他部分,例如按钮等。其背后的想法是对在某些屏幕上可用的功能。 这与我们当前开发Web应用程序的方式相结合。

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

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

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

此外,这是传递参数的推荐方式: :

  相关解决方案