如何使用参数化的Spring Junit测试创建TestSuite

时间:2011-09-08 22:29:10

标签: spring testing junit

我正在尝试将我的测试捆绑在一个TestSuite中,它将从目录中获取文件并在加载spring上下文后运行每个文件。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/META-INF/spring/context-test.xml"})
public class MyTestCase extends TestCase{

    private String fileName;

    public MyTestCase(String fileName){
        this.fileName = fileName;
    }

    @Resource private Processor processor;

    @Before
public void setup(){
    ...
    }

    @Test
    public void test(){
    Read file and run test..
    ...
    }

}

如果我这样做,则无法识别弹簧注释

public class MyTestSuite extends TestCase{

    public static Test suite(){
        TestSuite suite = new TestSuite();
        suite.addTest(new MyTestCase("file1"));
        suite.addTest(new MyTestCase("file2"));
        return suite;
    }
}

我查了一下,发现:Spring 3+ How to create a TestSuite when JUnit is not recognizing it,这表明我应该使用JUnit4TestAdapter。 JUnitTestAdapter的问题在于它不允许我传入参数,也不会使用MyTestSuite.suite()。我只能这样做:

public class MyTestSuite{

    public static Test suite(){

        return new JUnit4TestAdapter(MyTestCase.class);
    }
}

非常感谢您的回复。

由于

2 个答案:

答案 0 :(得分:1)

我不得不使用弃用的AbstractSingleSpringContextTests来实现这一点。 AbstractSingleSpringContextTests是从TestContext框架不可用的时候开始的。

public class MyTestCase extends AbstractSingleSpringContextTests {

    private String fileName;

    public MyTestCase(String fileName){
        this.fileName = fileName;
    }

    @Resource private Processor processor;

    @Override
    protected void onSetUp(){

         initialization code...

    }

    @Override
    protected String getConfigPath(){
         return "config/File/Path";
    }

    @Test
    public void test(){
    Read file and run test..
    ...
    }

}


public class MyTestSuite extends TestCase{

    public static Test suite(){
        TestSuite suite = new TestSuite();
        suite.addTest(new MyTestCase("file1"));
        suite.addTest(new MyTestCase("file2"));
        return suite;
    }
}

它不是最好的解决方案,但它确实有效。如果你有更好的想法,请发帖。

答案 1 :(得分:0)

最近找到了this解决方案。在我看来稍好一点,因为它不依赖于弃用的代码。