Для чего мы будем использовать атрибут теории? - PullRequest
7 голосов
/ 25 мая 2010

Я обнаружил [Theory] и [Datapoint] атрибутов в NUnit. Я не очень уверен, как я должен их использовать. Я думаю, что они могут быть использованы для тестирования на основе данных, и это меня заинтересовало. Там не так много ресурсов, доступных на тот же. Может кто-нибудь объяснить мне, как их использовать или указать мне ресурсы? Спасибо.

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Вы смотрели онлайн документы NUnit? Вот пример, который показывает вам, как вы можете использовать атрибуты [Theory] и [Datapoint]:

http://www.nunit.org/index.php?p=theory&r=2.5.3

0 голосов
/ 17 декабря 2014

Теория - это специальный тип теста, используемый для проверки общего утверждения. о разрабатываемой системе. Обычные тесты основаны на примерах. То есть разработчик предоставляет один или несколько примеров входных данных и ожидаемые результаты либо в пределах кода теста, либо - в случае Параметризованных Тестов - как аргументы к методу теста. Теория, на с другой стороны, делает общее утверждение, что все его утверждения будет проходить для всех аргументов, удовлетворяющих определенным предположениям.

Теории реализованы в NUnit как методы внутри TestFixture, которые помечены TheoryAttribute ([Theory]). теория методы всегда должны иметь аргументы и поэтому выглядят довольно схожими параметризованным тестам на первый взгляд. Тем не менее, теория включает в себя дополнительные источники данных для своих аргументов и позволяет специальные обработка предположений об этих данных. Ключевое отличие, тем не менее, является то, что теории делают общие заявления и являются более просто набор примеров.

Данные для теорий

Основным источником данных для теории является точка данных или точки данных приписывать. NUnit будет использовать любые поля обязательных типов, которые аннотирован одним из этих атрибутов, чтобы предоставить данные для каждого Параметр Теории. NUnit собирает значения для отдельных аргументы комбинаторно, чтобы обеспечить контрольные примеры для теории.

В дополнение к атрибутам Datapoint и Datapoints, возможно использовать любой из подходов для предоставления данных, которые признаны на нормальные параметризованные тесты. Мы предлагаем, чтобы эта возможность не была злоупотреблять, так как это противоречит разнице между тестом на основе примеров и теории. Тем не менее, это может быть полезно для того, чтобы гарантировать, что включен конкретный контрольный пример.

Предположения

Сама теория отвечает за обеспечение того, чтобы все предоставленные данные соответствует его предположениям. Это делается с помощью Assume.That(...) конструкция, которая работает так же, как Assert.That(...), но не вызывает отказ. Если предположение не выполняется для конкретного теста случай, этот случай возвращает неокончательный результат, а не успех или отказ.

Общий результат выполнения Теории над набором тестовых случаев определяется следующим образом:

Если допущения нарушаются для всех тестовых случаев, то теория Сам по себе помечен как сбой. Если какое-либо утверждение не выполняется, теория само по себе не получается. Если хотя бы в некоторых случаях принять заявленные предположения, и нет никаких ошибок утверждения или исключений, то теория проходит.

* +1025 * Пример:

В следующем примере теория SquareRootDefinition проверяет что реализация квадратного корня удовлетворяет следующему Определение:

"Учитывая неотрицательное число, квадратный корень этого числа всегда неотрицательный и, при умножении на себя, дает оригинал номер. "

public class SqrtTests
{
    [Datapoint]
    public double zero = 0;

    [Datapoint]
    public double positive = 1;

    [Datapoint]
    public double negative = -1;

    [Datapoint]
    public double max = double.MaxValue;

    [Datapoint]
    public double infinity = double.PositiveInfinity;

    [Theory]
    public void SquareRootDefinition(double num)
    {
        Assume.That(num >= 0.0 && num < double.MaxValue);

        double sqrt = Math.Sqrt(num);

        Assert.That(sqrt >= 0.0);
        Assert.That(sqrt * sqrt, Is.EqualTo(num).Within(0.000001));
    }
}

Взято из

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...