Базовый класс должен быть абстрактным, иначе NUnit создаст его экземпляр и запустит содержащиеся в нем тесты. Конечно, он также повторно запустит те же тесты, когда создаст экземпляр базового класса. В лучшем случае это сбивает с толку, а в худшем случае выдает ошибки, когда тесты выполняются только на базовом классе.
Вы используете термин dynamici c в вопросе без объяснения причин. Если вы имеете в виду метод или свойство instance , то этот ответ для вас. Конечно, противоположность метода stati c является методом экземпляра в C#, а «dynamici c» - это нечто иное. В любом случае, если вы имеете в виду что-то другое, отредактируйте свой вопрос, чтобы объяснить.
Итак ... в то время как NUnit 3 требует, чтобы ваш источник был stati c, это не ограничивает вас только использованием вещи, которые известны во время компиляции. Если ваш источник - это метод * stati c , а не поле, то вы можете найти необходимую информацию для динамического генерирования данных (в некотором смысле).
В NUnit 3 также возможно использовать TestCaseSource
для хранения ваших данных. В этом случае форма 3 конструктора атрибута (см. Документы) разрешает использование члена экземпляра. Однако эта форма помещает ваши данные в отдельный класс от ваших тестов и может не подходить для вашего использования.