我需要將所有測驗資料保存到一個properties
檔案或JSON
檔案中(因為它們比XML
. 我正在考慮使用單個屬性檔案來存盤整個專案的資料。不確定這是否可行。
我正在使用TestNG
帶有注釋的測驗框架@DataProvider
來標記將回傳二維陣列的函式。這是一個示例:
/*
* This returns 2 parameters for each test execution
*/
@DataProvider(name = "info on cars")
public Object[][] testDataOnCars(){
return new Object[][]{
{"Mercedes as key", "Value with any special char ~!@#$%^&*()_'\",./<>? "}, {"Jaguar", "<>?,./;':\"[]\{}|~!@#$%^&*()_ `"}
}
}
對此的相應測驗可能如下所示:
@Test(dataprovider = "info on cars")
public void testAllCars(String carName, String carDetails){
// Do something with carName and carDetails
}
對于不同的資料集,某些測驗可能需要不同數量的引數。例如:
/*
* This returns 4 parameters for each test execution
*/
@DataProvider(name = "info on bank statements")
public Object[][] testDataOnBankStatements(){
return new Object[][]{
{"Credit card payment", "200", "debit", "5th May, 2022"},
{"Salary credit", "5200", "credit", "5th May, 2022"},
}
}
這可能會被具有 4 個引數的測驗函式消耗:
@Test(dataprovider = "info on bank statements")
public void testAllCars(String description, Integer amount, String debitOrCredit, String date){
// Do something with the 4 params
}
有人知道嗎:
- 如何將測驗資料組織到檔案中?擁有屬性檔案或 JSON 檔案或其他型別的檔案會更好嗎?它是一個二維陣列,許多引數系結在一起。
- 是否建議將不同的測驗資料存盤到同一個屬性檔案中?或者我應該為每種測驗資料創建一個單獨的檔案(比如 1 個用于銀行資料的檔案 - 5 個引數,另一個用于旅行的檔案 - 3 個引數等)。
- 如何從檔案中讀取這種結構化資料并將它們作為 2D 陣列傳遞
Object[][]
?
uj5u.com熱心網友回復:
假設您有src/test/resources/test_data.json
看起來像的檔案
{
"infoOnCars": [
["Mercedes as key", "Value with any special char ~!@#$%^&*()_'\\\",./<>? "],
["Jaguar", "<>?,./;':\\\"[]\\{}|~!@#$%^&*()_ `"]
],
"infoOnBankStatements": [
["Credit card payment", "200", "debit", "5th May, 2022"],
["Salary credit", "5200", "credit", "5th May, 2022"]
]
}
然后,您可以將org.json
依賴項添加到您的專案并實作以下內容:
public class DataProviderTest {
private JSONObject jsonObject;
private JSONObject getJsonObject() throws URISyntaxException, IOException {
if(jsonObject == null){
jsonObject = new JSONObject(
Files.readString(Paths.get(DataProviderTest.class.getClassLoader().getResource("test_data.json").toURI()))
);
}
return jsonObject;
}
@DataProvider(name = "cars")
Iterator<Object[]> getCars() throws URISyntaxException, IOException {
return getIterator(getJsonObject(), "infoOnCars");
}
@DataProvider(name = "banks")
Iterator<Object[]> getBanks() throws URISyntaxException, IOException {
return getIterator(getJsonObject(), "infoOnBankStatements");
}
Iterator<Object[]> getIterator(JSONObject jsonObject, String key){
Map<String, Object> map = jsonObject.toMap();
Object val = map.get(key);
if(val instanceof ArrayList){
Iterator<ArrayList> valArray = ((ArrayList) val).iterator();
return new Iterator<>() {
@Override
public boolean hasNext() {
return valArray.hasNext();
}
@Override
public Object[] next() {
return valArray.next().toArray();
}
};
}
return null;
}
@Test(dataProvider = "cars")
public void test1(String carName, String carDetails){
System.out.println(">>>> Cars test started");
System.out.println("Car name: " carName);
System.out.println("Car details: " carDetails);
}
@Test(dataProvider = "banks")
public void test2(String description, String amount, String debitOrCredit, String date){
System.out.println(">>>> Bank test started");
System.out.println("Description: " description);
System.out.println("Amount: " amount);
System.out.println("Debit / Credit: " debitOrCredit);
System.out.println("Date: " date);
}
}
它將所有資料決議為字串。因此,您需要進行一些轉換才能將數字用作數字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475363.html
上一篇:使用Mutablelivedata從DialogFragmentColorPicker更改片段的背景顏色不起作用