У меня есть DataProvider TestNG, который должен возвращать Object [] []. Вот как я получаю этот объектный массив, который возвращаю.
Методика тестирования выглядит так:
public void testUser(UserModel testData)
Получить тип аргумента родительского метода Test. (Метод m.getParameterTypes () [0] .newInstance) и добавьте его в массив объектов. (Он добавит объектный тип UserModel в этот массив) - Это отлично работает.
Передайте этот Object [] в метод, который читает из файла json и встраивает его в тип объекта. Затем этот метод возвращает массив объектов (Object []) этого типа объекта на основе файла json. - Это нормально работает.
Оттуда я конвертирую Object [], возвращаемый в массив 2D-объектов. Выглядит это так: Объект [размер] [1]. - Он строит объект [] [] нормально, но здесь объекты могут потерять свой тип.
Например: массив состоит из двух объектов. это будет выглядеть так. Объект [1] [1] = Объект [0] Объект [2] [1] = Объект [1]
Затем я возвращаю этот объект для использования, и он вызывает следующее исключение:
java.lang.IllegalArgumentException: несоответствие типа аргумента
Я попытался вернуть единственный объект Object [], который метод возвращает, как показано ниже:
return new Object[][] { singleObjectArray };
Но это просто игнорирует тестовые случаи, потому что он не возвращает его должным образом.
Как я могу убедиться, что массив объектов возвращает правильные типы. Я просто хочу иметь возможность обрабатывать массивы объектов из json и многократно запускать тестовый пример.
Вот код DataProvider.
@DataProvider(name = "DataProviderArray")
protected static Object[][] getCoreDataProviderArray(Method superMethod,
ITestContext context) {
List<Object> objectList = new ArrayList<>();
try {
objectList.add(superMethod.getParameterTypes()[0].newInstance());
Object[] objectArray = objectList.toArray();
JsonUtils jsonUtils = new JsonUtils(TEST_DATA_LOCATION
+ context.getName() + JSON_EXTENSION);
Object[] newUsers = jsonUtils.createArrayOfObjectsFromJsonFile(objectArray);
Object [][] objects = new Object[newUsers.length][1];
for (int i = 0; i < newUsers.length; i++) {
System.arraycopy(newUsers, i, objects[i], 0, 1);
}
return objects;
} catch (Exception e) {
throw new RuntimeInterruptionException("Could not return object for "
+ superMethod.getParameterTypes()[0] + "...");
}
}
и класс JsonUtils:
public Object[] createArrayOfObjectsFromJsonFile(Object[] objectToCreate) {
gson = new GsonBuilder().create();
return gson.fromJson(reader, objectToCreate.getClass());
}
а вот трассировка стека:
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Заранее спасибо!
objects[i][0] = newUsers[i]
вместоSystem.arraycopy(newUsers, i, objects[i], 0, 1);
? - person juherr   schedule 13.10.2016