Raising obfuscated events with moq throws error -
we have using moq 2 month now. there problem can not solve somehow.
in visual studio tests succeeded fine. on build server there several tests failed. have in common is, use "raise" method throw event. our build server tests obfuscated find obfuscation errors. every "normal" expectation "setup(something).returns(something)" works. raise event fails. stacktrace looks following:
message: test method ade.graphic.presenter.test.routingenginetest.testrouteoverladderlineswithfbd threw exception: system.argumentexception: not locate event attach or detach method void ᜀ(ᦜ[ᢈ]). +++++++++++++++++++ stack trace: bei moq.extensions.getevent[tmock](action`1 eventexpression, tmock mock) bei moq.mock`1.raise(action`1 eventexpression, eventargs args) bei ade.graphic.presenter.test.routingenginetest.testrouteoverladderlineswithfbd()
the code is:
documenteventhandler.raise(stub => stub.documentchanged += null, new documentchangeeventargs(documentchangetypes.viewupdate));
we have no idea difference between code above , this
eventhandler.setupget(stub => stub.documentchangenotify).returns(documenteventhandler.object);
because code works fine.
does had same problem or @ least can tell difference is?
the error comes (not sure not tested) fact events (i.e. documentchanged) generated 2 accessors: add_documentchanged , remove_documentchanged . similar properties have , set accessors.
what obfuscator did rename add_documentchanged , remove_documentchanged. however, looking @ moq source code, can see moq relies on events accessor keeping same name:
var ev = addremove.declaringtype.getevent( addremove.name.replace("add_", string.empty).replace("remove_", string.empty));
ev == null in case, raises error.
in second examples, you're using delegates not broken down add_ , remove_ accessors.
you're better off not obfuscating events.
Comments
Post a Comment