Как тестировать классы.Net, запущенные из внешнего кода
Я намерен использовать BenchmarkDotNet для тестирования некоторых методов внутри различных проектов.
Как это может быть так просто, как добавление Benchmark
Приписывая методы, я сильно сомневаюсь в использовании этого в проекте, над которым работаю.
Проект состоит из 2 частей:
- родное ядро
- Особенности.Net
Нативная часть инициализирует часть.Net и вызывает ее методы через взаимодействие.
Таким образом, использование тестового проекта и добавление ссылок на проекты.Net и запуск эталонного приложения не будут работать, так как сначала нужно запустить собственный код.
Любая идея, если я могу как-то пропустить нативную часть и заставить BenchmarkDotNet тестировать только методы? Или я должен искать другой подход сравнения?
2 ответа
- Создать новый публичный класс
- Создайте метод сравнения, назовите то, что вы хотите измерить. Отметьте это с
[Benchmark]
приписывать.
Если этого достаточно для запуска кода инициализации один раз (для многих итераций теста):
- Создайте новый метод, осуществите инициализацию и пометьте его
[GlobalSetup]
атрибут - BenchmarkDotNet собирается создать новый экземпляр вашего класса, один раз вызвать метод setup, а затем запустить сравнительный анализ вашего кода.
Если недостаточно выполнить инициализацию один раз, и ее необходимо вызывать каждый раз перед вызовом метода, измеренного в тестах:
- Создайте новый метод, осуществите инициализацию и пометьте его
[IterationSetup]
приписывать. Установите стратегию запуска наRunStrategy.Monitoring
, - BenchmarkDotNet собирается создать новый экземпляр вашего класса, вызвать метод setup один раз, прежде чем вызывать тест, и повторить его много раз.
Вы можете прочитать больше о настройках и очистках в наших официальных документах.
Глядя на спецификацию BenchmarkDotNet, кажется, что вы можете пометить любой метод как эталонный, это не обязательно должны быть методы, которые вызывает ваше нативное приложение. Подобно модульным тестам, вы можете написать тесты, которые вызывают методы в вашем.NET-коде с допустимыми параметрами, которые в противном случае исходили бы из собственного ядра.
Я бы предложил создать отдельный проект Benchmark, аналогичный тому, как у вас будет отдельный тестовый проект.