Разрабатываю приложение, которое будет тестировать некое устройство. Набор тестов окончательно не определен и тесты могут добавляться и удаляться в дальнейшем.
Тест заключается в отправке последовательностей специальных команд устройству, ожиданию результата, анализу и отображении его на форме.
Вопрос в том, как архитектурно сделать так, чтобы добавление и удаление тестов требовало минимум правок вспомогательного кода?
То есть, в идеале должно быть так: я пишу класс или метод, который содержит в себе необходимые действия для теста, а система затем сама находит все реализации тестов и запускает их последовательно.
Такое реализуемо в C# ? Если да, то как обычно это делается? Если есть на примете opensource-проекты, где подобные задачи решались, буду признателен за ссылки.
Какую литературу можно почитать на тему проектирования расширяемой архитектуры, чтобы таких вопросов не возникало и чтобы знать типовые решения?
Через Reflection находишь нужные классы в сборке, создаешь экземпляры, и делаешь все что нужно. Классы должны наследовать один интерфейс, реализация не должная составить труда
Причем возможно даже читать исходники плагинов из файлов и компилировать их перед выполнением на уже готовом ядре приложения (System.CodeDom.Compiler, потом CodeDomProvider.CompileAssemblyFromSource(...) ), а далее загружать через Reflection (System.Reflection.Assembly.LoadFrom(...)).