NUnit: Выполнение нескольких утверждений в единственном тесте

Вы можете создать функцию, которая, согласно тексту <span>, находит соответствующий элемент и щелкает по его родительскому элементу. После срабатывания waitForKeyElements вызовите эту функцию с помощью Male и Mr.:

const findAndClickParent = text => [...document.querySelectorAll('label > span')]
  .find(e => e.textContent === text)
  .parentElement
  .click();

waitForKeyElements (
  "label",
  () => {
    findAndClickParent('Male');
    findAndClickParent('Mr.');
  }
);

. Если вы хотите повысить эффективность, вы можете создать объект из этих совпадающих элементов при срабатывании обратного вызова (при условии, что ни один из них, который вас волнует), и каждый раз обращайтесь к соответствующему свойству, например:

waitForKeyElements (
  "label",
  () => {
    const parentsByTextContent = Array.prototype.reduce.call(
      document.querySelectorAll('label > span'),
      (a, e) => {
        a[e.textContent] = e.parentElement;
        return a;
      },
      {}
    );
    parentsByTextContent['Male'].click();
    parentsByTextContent['Mr.'].click();
  }
);
6
задан Mihai Limbășan 11 October 2008 в 16:38
поделиться

6 ответов

1) Если идентификатор является постоянным и не искавший во время тестового прогона, создает отдельное приспособление модульного теста для каждого идентификатора. Тем путем Вы будете знать, какой идентификатор на самом деле приводят к сбою. Посмотрите здесь для записи на проблемах с управляемыми данными тестами:
http://googletesting.blogspot.com/2008/09/tott-data-driven-traps.html

2) Если необходимо динамично искать идентификатор, лишающий возможности для создания приспособления для каждого идентификатора, используйте предложение akmad с одним изменением. Сохраните список идентификатора, где значения не равны и добавляют список к сообщению об ошибке. Будет чрезвычайно трудно диагностировать провальный тест, который только указывает количество ошибок, поскольку Вы не будете знать что причина идентификатора ошибки.

3) Я не знаю, как трудный это должно было бы сделать в NUnit, но в PyUnit, когда мы должны запустить тесты на динамично сгенерированных данных, мы динамично создаем тестовые приспособления и присоединяем их к классу TestCase так, чтобы у нас был проваленный тест на каждую часть данных, которые не передают. Хотя я предполагаю, что это было бы намного более трудно без динамических способностей Python.

5
ответ дан 8 December 2019 в 12:24
поделиться

Кажется, что Вы просто Утверждаете неправильную вещь. Если Вы хотите проверить все значения и затем утверждать, что нет никаких ошибок (или покажите количество ошибок), затем попробуйте это:

[Test]
public void TestSelect()
{
    int errors = 0;
    foreach(id in ids)
    {
        DataTable old = Database.call("old_stored_proc",id);
        DataTable new_ = Database.call("new_stored_proc",id);

        if (old.Rows[0]["column"] != new_.Rows[0]["column"])
        {
            errors++;
        }            
    }

    Assert.AreEqual(0, errors, "There were " + errors + " errors.");
}
9
ответ дан 8 December 2019 в 12:24
поделиться

Я считал бы количество строк, которые не соответствуют и затем записали бы утверждение, которое сравнит это число с 0 и возвратило бы количество не соответствующие строки в сообщении.

Вы могли также использовать Assert.Greater для этого.

P.S. В принципале необходимо попытаться сделать одно утверждение на модульный тест. Это - суть его.

1
ответ дан 8 December 2019 в 12:24
поделиться

На основе цели Вы разметили, весь тест должен перестать работать, если одна строка не соответствует другому. При подсчете количества раз, которое передает утверждение или сбои дают Вам меньше информации, чем сравнение результата, который Вы ожидали с результатом, который Вы на самом деле получили.

0
ответ дан 8 December 2019 в 12:24
поделиться

Хорошо Вы могли объявить счетчик и затем утверждать, что значение в противоречии с определяет передачу/сбой

Кроме того, Вы могли сделать объем работы в тестовой установке и затем просто создать несколько тестов.

Я не ясен относительно того, почему Вам нужно все утверждение stmts в том же тесте.

0
ответ дан 8 December 2019 в 12:24
поделиться

Я знаю, что речь идет именно о NUnit, но, что интересно, Gallio / MbUnit имеет функцию, которая позволяет запускать и перехватывать несколько утверждений одновременно.

[Test]
public void MultipleTest()
{
    Assert.Multiple(() =>
    {
       Assert.IsTrue(blabla);
       Assert.AreEqual(pik, pok);
       // etc.
    }
}

Assert.Multiple перехватывает все ошибочные утверждения и сообщает о них в конце теста.

4
ответ дан 8 December 2019 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: