Специально для C # Unit Testing , как выполнить тестовый прогон для различных входов или матрицы ввода?
У меня очень часто бывают случаи модульных тестов, составляющих матрицу входных данных, но обычно это можно решить путем проверки списка входных данных.
Простейший случай - тестирование дополнения :
- 0 + 0 = 0
- 1 + 0 = 1
- 0 + -1 = -1
- 1 + -1 = 0
Те же тесты будут выполняться для каждого из этих входов (в этом примере есть 4 входа, каждый из которых связан с некоторым ожидаемым выходом.
Простое решение :
object[] inputs = ...
foreach (var input in inputs)
// Put Assert here
Проблема в том, что при запуске теста не сообщает, для какого ввода произошел сбой , если вы не включите достаточно подробностей в журнал сообщений вручную .
Другое решение - развернуть цикл (как показано ниже). Затем трассировка стека дает данные о том, какой вход не прошел, и это позволяет снова запустить тест для одного входа.
TestAddition(0, 0, 0);
TestAddition(1, 0, 1);
TestAddition(0, -1, -1);
TestAddition(1, -1, 0);
И последнее, но не менее важное: такие решения, как FitNess , которые, кажется, помогают в таких случаях, но также добавляют много сложности и, кажется, не подходят для стандартной разработки на C #.
Все эти решения плохо работают с приборами, потому что [TestInitialize]
вызывается один раз для всех входов.
Каково ваше решение?
Есть ли какая-то функция, о которой я не знаю, которая помогает этим случаям?