TestNG中的DataProvider返回Iterator<Object[]>的妙用

TestNG中使用DataProvider有個好處,就是:

1. 在執行用例的時候dataProvider迭代中的每組數據都是作爲一個用例執行

2. 在測試數據有規律的情況下,免去了添加testXML測試數據的煩惱,直接將測試數據,按個或者組,放到dataProvider中即可

注意:但是dataProvider作爲數據提供者只能返回Object[][]和Iterator<Object[]>類型的數據

 

那我們的數據是按照對象存儲的該怎麼寫入和輸出呢,我這裏提供一個簡單的樣例:

    // 返回Iterator<Object[]>
    @DataProvider(name = "iterator")
    public Iterator<Object[]> dp1() {
        List<Object> item = new ArrayList<Object>();

        // 添加第一個用戶
        UserInfo user1 = new UserInfo();
        user1.setUserName("User1");
        user1.setPassword("Password1");
        item.add(user1);

        // 添加第二個用戶
        UserInfo user2 = new UserInfo();
        user2.setUserName("User2");
        user2.setPassword("Password2");
        item.add(user2);

        List<Object[]> users = new ArrayList<Object[]>();

        for (Object u : item) {
            //做一個形式轉換
            users.add(new Object[] { u });
        }
        return users.iterator();

    }

我們將上述的UserInfo的數據組放入到了iterator中,怎麼調用呢?

    @Test(dataProvider = "iterator")
    public void testProvider(UserInfo user) {
        System.out.println("User Name is: "+ user.getUserName() +"\n"+"User password is" + user.getPassword());
        
    }

這裏給出一個UserInfo的對象

/**  
* @Title: UserInfo.java
* @Package com.dataProvider.domain
* @Description: TODO(用一句話描述該文件做什麼)
* @author pc
* @date 2017年1月16日
* @version V1.0  
*/

package com.dataProvider.domain;

/**
 * @ClassName: UserInfo
 * @Description: TODO(這裏用一句話描述這個類的作用)
 * @author pc
 * @date 2017年1月16日
 *
 */

public class UserInfo {
    private String userName;
    private String password;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章