TestNG的應用 -- DataProvider

TestNG的@DataProvider應用

先說遇到的問題:

  1. 將數據驅動方法和測試方法寫在了兩個類中,運行測試方法會被Skip。
    錯誤代碼如下
public class DataTest {
    @Test(dataProvider = "range-provider")
    public void testIsBetween(int n, int lower,int upper, boolean expected)
    {
        System.out.println("Received " + n + " " + lower + "-"+ upper + " expected: " + expected);
    }
}

public class DataProviders {
@DataProvider(name = "range-provider")
    public static Object[][] rangeData() {
        int lower = 5;
        int upper = 10;
        return new Object[][] {
                { lower-1, lower, upper, false },
                { lower, lower, upper, true },
                { lower+1, lower, upper, true },
                { upper, lower, upper, true},
                { upper+1, lower, upper, false },
        };
    }
}

錯誤原因: 代碼中沒有指定在哪個類中找數據,在當前類中也找不到這個dataProvider,所以就認爲沒有測試數據,直接skip了

以下是官方解釋:
A @Test method specifies its Data Provider with the dataProvider attribute. This name must correspond to a method on the same class annotated with @DataProvider(name="…") with a matching name.
By default, the data provider will be looked for in the current test class or one of its base classes. If you want to put your data provider in a different class, it needs to be a static method or a class with a non-arg constructor, and you specify the class where it can be found in the dataProviderClass attribute.

根據官方文檔,現在有三種方式來解決我們的問題
1、在父類中寫dataProvider,然後在子類中引用
2、在同一個類中寫dataProvider和測試方法
3、寫在非繼承關係的兩個類中,需要在@DataProvider中指定dataProviderClass,將其指定你寫dataProvider的那個類

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