C # библиотека для автоматического создания значений для модульных тестов - PullRequest
5 голосов
/ 21 июля 2011

Я читал о библиотеке, которая генерирует автоматические значения для использования в модульном тесте, но не смог найти ее. В основном, то, что я хочу, было вместо:

[Test]
public void Test()
{
    int x = 2;
    int y = 5;

    Assert.AreEqual(7, ObjectUnderTest.Add(x, y));
}

Я хочу написать:

[Test]
public void Test()
{
    int x = Lib.Int();
    int y = Lib.Int();

    Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y));
}

Обновление:

Автокрепление - это то, что я ищу. С AutoFixture мой тест будет:

[Test]
public void Test()
{
    var fixture = new Fixture();
    int x = fixture.CreateAnonymous<int>();
    int y = fixture.CreateAnonymous<int>();

    Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y));
}

Ответы [ 6 ]

7 голосов
/ 21 июля 2011

Я думаю, вы можете использовать PEX !

Pex автоматически создает небольшой набор тестов с высоким охватом кода для программы .NET.С этой целью Pex выполняет систематический программный анализ (используя динамическое символьное выполнение, аналогичное проверке модели с ограничением пути), чтобы определить входные данные для параметризованных модульных тестов.Pex изучает поведение программы, отслеживая следы выполнения.Pex использует решатель ограничений для создания новых входных данных теста, которые выполняют другое поведение программы.

3 голосов
/ 21 июля 2011

Я еще не использовал ни одного из них, но также интересуюсь темой.

Вот сводка всех из них , выполненная автором другого инструмента, который стоит посмотреть под названием QuickGenerate.

1 голос
/ 21 июля 2011

AutoPoco позволяет создавать объекты для тестов.

1 голос
/ 21 июля 2011

NBuilder - отличная библиотека для создания наборов тестовых данных и объектов.Он использует свободный API, поэтому, IMHO, довольно легко подобрать и начать работать с ним.

Вот так (не тестируется на компиляции):

[Test]
public void Test()
{
    int x = Builder<int>.CreateNew().Build();
    int y = Builder<int>.CreateNew().Build();

    Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y));
}

Есть способы создания случайных данныха также.

0 голосов
/ 19 марта 2014

AutoFixture (http://autofixture.codeplex.com/) - отличная библиотека. Она может легко создать объект с глубокой иерархией дочерних элементов в одной строке кода.

0 голосов
/ 21 июля 2011

Вы можете сделать это и автоматически генерировать значения с помощью NBuilder (http://nbuilder.org/).

Если вы просто хотите получить случайные числа (это то, что вы получите с помощью NBuilder), есть и более простой способ сделать это, просто используйте встроенный класс Random

http://msdn.microsoft.com/de-de/library/system.random.aspx

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

http://msdn.microsoft.com/en-us/library/ms182527(v=VS.100).aspx

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

Укажите диапазон значений и ожидаемых результатов и проверьте его.

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