Fenriswolf 程式筆記

奮利斯狼的地盤,小綿羊勿入

Support Parameterized in Spring Test Framework

Junit 的 Parameterized 是一個很好用的功能,但是目前 spring 的 test runner 並沒有支援(在 3.1 M2 開始支援),要自訂 Spring Parameterized 只要參考 Junit 內的 Parameterized class,把 inner class 改繼承 SpringJUnit4ClassRunner,並在 createTest 之後做一個初始化的動作即可。

private class TestClassRunnerForParameters extends SpringJUnit4ClassRunner {
        private final int fParameterSetNumber;

        private final List<Object[]> fParameterList;

        TestClassRunnerForParameters(Class<?> type, List<Object[]> parameterList, int i)
                throws InitializationError {
            super(type);
            fParameterList = parameterList;
            fParameterSetNumber = i;
        }

        @Override
        public Object createTest() throws Exception {
            Object testInstance = getTestClass().getOnlyConstructor().newInstance(
                    computeParams());
            getTestContextManager().prepareTestInstance(testInstance);
            return testInstance;
        }
}

接下來就可以寫自己的 test cases 了

@RunWith(SpringParameterizedRunner.class)
@ContextConfiguration(locations = { "classpath:appContext.xml" })
public class MyTest {
    private int userId;

    @Resource
    private UserService userService;

    public MyTest(int userId) {
        this.userId = userId;
    }

    @Test
    public void run() {
        userService.createUser(userId);
    }

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] { { 0 }, { 1 }, { 2 }, { 3 }, { 4 }, { 5 },
                { 6 } });
    }
}

 
 
執行環境
JDK 1.6.0_21
spring 3.0.3
junit 4.8.1

參考資料
Add support for parameterized JUnit 4 tests in the Spring TestContext Framework

程式下載
SpringParameterizedRunner.java
MyTest.java

廣告

2012/03/21 - Posted by | Java Framework | ,

仍無迴響。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: