Citrus TestNG тест Несоответствие провайдера данных - PullRequest
0 голосов
/ 06 января 2020

Я получаю исключение - несоответствие поставщика данных при попытке получить цитрусовый контекст с поставщиком данных

Это тест и поставщик данных

 @DataProvider(name = "todoDataProvider")
  public Object[][] todoDataProvider() {
    return new Object[][] {
      new String[] {"todo1", "Description: todo1"},
      new String[] {"todo2", "Description: todo2"},
      new String[] {"todo3", "Description: todo3"}
    };
  }

  @Test(dataProvider = "todoDataProvider")
  @CitrusTest
  @Parameters({"name", "description", "context"})
  public void testProvider(
      String name, String description, @CitrusResource @Optional TestContext context) {

    variable("todoId", "citrus:randomUUID()");
    //   this.name(todoName);
    echo(name);
  }

org.testng .internal.reflect. .String, DeclaAnnotations = []}, параметр {index = 2, type = com.consol.citrus.context.TestContext, DeclaAnnotations = [@ com.consol.citrus.annotations.CitrusResource (), @ org.testng.annotations. Необязательный (value = null)]}]) Аргументы: [(java .lang.String) todo1, (java .lang.String) Описание: todo1] at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments ( DataProviderMethodMatcher. java: 49) в org.testng.internal.Invoker.injectParameters (Invoker. java: 1293) в org.testng.internal.Invoker.invokeTestMethods (Invoker. java: 1187) в org.testng .internal.TestMethodWorker.invokeTestMethods (TestMetho dWorker. java: 126) в org.testng.internal.TestMethodWorker.run (TestMethodWorker. java: 109) в org.testng.TestRunner.privateRun (TestRunner. java: 744) в org.testng.TestRunner .run (TestRunner. java: 602) в org.testng.SuiteRunner.runTest (SuiteRunner. java: 380) в org.testng.SuiteRunner.runSequentially (SuiteRunner. java: 375) в org.testng. SuiteRunner.privateRun (SuiteRunner. java: 340) в org.testng.SuiteRunner.run (SuiteRunner. java: 289) в org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker. java: 52) в org.test .SuiteRunnerWorker.run (SuiteRunnerWorker. java: 86) в org.testng.TestNG.runSuitesSequentially (TestNG. java: 1301) в org.testng.TestNG.runSuitesLocally (TestNG. java: 1226) testng.TestNG.runSuites (TestNG. java: 1144) в org.testng.TestNG.run (TestNG. java: 1115) в org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG. java: 114) в org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG. java: 251) в org.testng.remote.RemoteTestNG.main (RemoteTestNG. * 103 2 *: 77)

1 Ответ

0 голосов
/ 06 января 2020

Кажется, что параметры цитрусовых вводятся в передаваемые параметры поставщика данных, поэтому поставщику данных необходимо включить пространство для параметров цитрусовых.

found https://github.com/citrusframework/citrus/commit/952204eaacf672677a01cc66f3385f64cd08f8d4, который имел исправление для передачи переменных цитрусовых с поставщиком данных, но, что более важно / полезно для меня, модульные тесты. Таким образом, он играет с модульными тестами и выглядит так, как будто в поставщике данных требуется нулевое значение для каждой вводимой / передаваемой переменной цитрусовых.

 @DataProvider(name = "todoDataProvider")
  public Object[][] todoDataProvider() {
    return new Object[][] {
      new String[] {"todo1", "Description: todo1", null},
      new String[] {"todo2", "Description: todo2", null},
      new String[] {"todo3", "Description: todo3", null}
    };
  }

  @Test(dataProvider = "todoDataProvider")
  @CitrusTest
  @Parameters({"name", "description", "context"})
  public void testProvider(
      String name, String description, @CitrusResource @Optional TestContext context) {

    variable("todoId", "citrus:randomUUID()");
    //   this.name(todoName);
    echo(name);
  }

  @Test(dataProvider = "testData")
  @Parameters({"data", "temp", "runner", "context"})
  @CitrusTest
  public void injectResourceRunnerCombinedWithParameter(
      String data,
      String test,
      @CitrusResource TestRunner testRunner,
      @CitrusResource TestContext context) {
    final String number = Functions.randomNumber(10L, context);
    context.setVariable("message", "Injection worked!");

    testRunner.echo("${message}");
    testRunner.echo("${data}");
    testRunner.createVariable("random", number);

    testRunner.run(
        new AbstractTestAction() {
          @Override
          public void doExecute(TestContext context) {
            Assert.assertEquals(context.getVariable("random"), number);
          }
        });
  }

  @DataProvider
  public Object[][] testData() {

    return new Object[][] {{"hello", "test", null, null}, {"bye", "test", null, null}};
  }
...