У меня есть следующая базовая настройка для уни-теста: он тестирует класс, который отвечает за индексирование файлов в каталоге и продолжает давать правильный по требованию. Для этого я использую файловую систему mock, предоставленную библиотекой system.io.abstractions
. Базовая настройка заключается в следующем:NUnit, может ли «настроить» работать до «ValueSource»?
[TestFixture]
public class ImageDataTests
{
private static MockFileSystem fs;
private const int TESTNUM = 3;
[SetUp]
public static void Init() {
var allnamegroups = TestSettings.NameGroupFactory(TESTNUM);
fs = new MockFileSystem();
foreach (string[] namegroup in allnamegroups) {
var dname = ImageData.MakeDirectoryName(namegroup[0], namegroup[1]);
TestSettings.AddTestFilesToMockFileSystem(fs, dname);
}
}
}
Теперь каждый тест работает на случай для этого, а также для проверки (например) функцию «перезагрузить» Я добавить следующий метод выше класса:
public static IEnumerable<ImageData> ImgDatSource() {
while (true) {
yield return new ImageData("test", fs);
}
}
[Test, Sequential]
public void GetAllOfTypeTest(
[ValueSource(nameof(ImgDatSource))] ImageData img,
[Values("foo", "bar", "this")]string type,
[Values(1, 2, 0)]int ex) {
Assert.That(() => img.GetAllOfType(type).Count(), Is.EqualTo(ex));
}
Это должно (прямо сейчас) перечислить все файлы, начиная с соответственно «foo», «bar» и «this». - Не удалось, указав, что каталог не найден. - Еще до запуска первого теста: при инициализации Imagedata
. Отладка проверяет, что я думал: Init()
еще не запущен, когда ValueSource
пытается инициализировать ввод.
Есть ли способ сделать «такой» тест, за исключением инициализации Imagedata
внутри испытательного тела? (И потерять параметрическую конструкцию + тест-индексацию, либо написать много подобных тестов вручную).
Обратите внимание, что мне действительно нужно запускать генератор файловой системы каждый тест: в то время как тест выше прост и не делает многого. Некоторые тесты будут адаптировать/изменить файловую систему, чтобы протестировать класс против большего количества ребер. - Также во время теста.
Мог ли я автоматически сгенерировать эту строку для каждой функции в некотором роде, возможно, запустив другой макрос? Это дублирование кода, и я думаю, что это всегда должно быть предотвращено. – paul23
Я в частичном согласии. Копирование дубликатов в тестах часто полезно, потому что оно делает каждую тестовую стенд само по себе. В этом случае, однако, было бы лучше, если бы был способ избежать этого. Единственный подход, который я могу придумать, - это параметризовать прибор и создать imagedata в OneTImeSetUp. Однако это может быть больше, чем просто добавление кода в каждый метод. – Charlie