#c# #.net #mocking
#c# #.net #издевательство
Вопрос:
Мы использовали moq, который в значительной степени зависит от деревьев выражений и reflection.emit. Но Span не может находиться в дереве выражений, поэтому методы, которые принимают или возвращают интервал, не могут быть имитированы с его помощью.
Мы работали над этим, вручную создавая макеты, самостоятельно реализуя интерфейсы. Но это отнимает много времени и далеко от идеала.
Как я могу имитировать метод, который принимает или возвращает диапазон?
Комментарии:
1. Используйте
Memory<T>
вместоSpan<T>
.2. @aepot Хотя это допустимый обходной путь, моему коду не нужна память<T>, и кажется неправильным принудительно использовать память<T> в моем дизайне только из-за издевательства.
3. Вы проверили, возможно ли это с помощью нового механизма трюков в предстоящем Moq 5?
4. нехорошо, но вы могли бы создать класс адаптера, реализующий рассматриваемый интерфейс и делегирующий метод с
Span<T>
параметром или возвращаемым значением новому виртуальному методу, который имеет, например,T[]
вместо этого. Затем создайтеMock<Adapter>
и имитируйте новый виртуальный метод.5. Это конец первого квартала 2022 года, и это все еще кажется проблемой. Moq5 еще не выпущен, и мы все еще не можем издеваться
Span<T>
. Кто-нибудь смог найти обходной путь?