Пытаюсь добавить юнит тесты к проекту. И обнаруживаю что не все так просто.
Тот же самый ParameterDefinition из Mono.Cecil объявлен как sealed. Это значит, что например Moq не сможет с ним работать. Придется смотреть на
RhinoMock и товарищей. Хотя что-то мне подсказывает что они тоже обломаются.
Upd. RhinoMock тоже не сумел.
Сюрпризы на этом не заканчиваются.
Например, Mono.Cecil теряет информацию о generic параметрах метода в FullString. В качестве примера
// three genrics, parameter uses generic type, return type int
int ThreeGenericsInt<T, S, Q>(Dictionary<S, Q> dic)
превращается в
System.Int32 CoolLibrary.Test::ThreeGenericsInt(System.Collections.Generic.Dictionary`2<S,Q>)
Если убрать generic параметр T,
// two genrics, parameter uses generic type, return type int
int ThreeGenericsInt<S, Q>(Dictionary<S, Q> dic)
на выходе будет то же самое
System.Int32 CoolLibrary.Test::ThreeGenericsInt(System.Collections.Generic.Dictionary`2<S,Q>)
И удобный способ заполнения Dictionary на основе method.FullName идет лесом. Конечно вопрос решаемый, но подобных мелочей выскакивает слишком уж много.
Например, считать 2 следующих определения изменением одного метода, или удалением первого, и добавлением нового?
int ThreeGenericsInt<T, S, Q>(Dictionary<T, Dictionary<S, Q>> dic)
int ThreeGenericsInt<T, S, Q>(Dictionary<T, Dictionary<S, Q>> dic) where T: IEnumerable
А ведь еще есть атрибуты, изменение котрых тоже стоит отслеживать, поля и свойства и всякое такое прочее.