Member 13871081 Ответов: 1

Сообщение: аргументы не были предоставлены-параметры динамических данных nunit, c#.visual studio


Помогите!!!!

Мне нужна помощь, так как я не вижу, где я не дотягиваю до параметризованных тестов Nunit.Я получаю сообщение об ошибке "никаких аргументов не предоставлено"

Что я уже пробовал:

[Setup]
public static IEnumerable ReturnValuesToTest(XmlNode node3)
{
  foreach (XmlNode node in node3)
  {
    //this gets the username and Password from the xml node
    foreach (string Browser in browsers)
    {
      //loops through repository of browsername....
      yield return new BrowserTesting(username,password,browser);
      // returns values to constructor.
    }
  }
}

public class BrowserTesting
{
  private string newuser;
  private string newpassword;
  private string newbrowser;

  public BrowserTesting(string newuser, string newpassword, string newbrowser)
  {
    this.newuser = newuser;
    this.newpassword = newpassword;
    this.newbrowser = newbrowser;
    TestBase.BrowserTest(this.newuser, this.newpassword, this.newbrowser);
    // call the Testmethod accepting parameters 
  }
}

[Test]
[TestCaseSource(typeof(BrowserTesting),"BrowserTesting")]
public static void BrowserTest(string User, string Password, string Browser)
{
  // pull up the url in different browsers with the same User and password parameter.
}

Richard MacCutchan

Где происходит эта ошибка?

1 Ответов

Рейтинг:
0

Tomas Takac

Я перепутал роли классов/методов. Теперь прошло много времени с тех пор, как я использовал NUnit, так что потерпите меня.

Что вам нужно, так это источник ваших данных. Вы решили использовать свой собственный класс для инкапсуляции тестовых данных. Обратите внимание, что вы не можете передать какой-либо параметр этому методу, поэтому вам нужно придумать какой-то другой способ получить XmlNode.

public static IEnumerable ReturnValuesToTest()
{
  foreach (XmlNode node in node3)
    foreach (string Browser in browsers)
      yield return new BrowserTesting(username,password,browser);
}

В качестве альтернативы вы можете просто вернуть строковый массив (по одному элементу на параметр):
public static IEnumerable ReturnValuesToTest()
{
  foreach (XmlNode node in node3)
    foreach (string Browser in browsers)
      yield return new [] {username,password,browser};
}

Теперь, используя класс BrowserTesting, ваш тестовый метод должен иметь соответствующий параметр.
[Test]
[TestCaseSource("ReturnValuesToTest")]
public static void BrowserTest(BrowserTesting browserTesting)
{
  // do the test here
}

Если вы решите использовать строку[] в качестве источника ваших данных, то ваша сигнатура метода тестирования останется такой же, как и была:
[Test]
[TestCaseSource("ReturnValuesToTest")]
public static void BrowserTest(string User, string Password, string Browser)
{
  // do the test here
}

В обоих приведенных выше примерах предполагается, что метод источника данных относится к тому же классу, что и метод тестирования. Если это не так, то вам нужно указать его явно:
[Test]
[TestCaseSource(typeof(MyClassThatHasReturnValuesToTestMethod),"ReturnValuesToTest")]
public static void BrowserTest(string User, string Password, string Browser)
{
  // do the test here
}

Чего вы определенно не хотите, так это звонить в TestBase.BrowserTest() из конструктора BrowserTesting. Метод тестирования вызывается автоматически для каждого экземпляра тестовых данных NUnit.

Я рекомендую вам немного почитать дальше Атрибут TestCaseSource[^] и TestCaseData[^]. Вы можете сделать некоторые красивые вещи с последним.