Basically, Ruby is able to do all the crazy mocking stuff because of its mutable type system, and the only way to make the CLR's type-system mutable is to rewrite the IL. To put it in SAT terms:
"rewriting IL" is to "static languages" as "monkey-patching" is to "dynamic languages" =P ~Jimmy > -----Original Message----- > From: ironruby-core-boun...@rubyforge.org [mailto:ironruby-core- > boun...@rubyforge.org] On Behalf Of Ben Hall > Sent: Sunday, January 24, 2010 1:31 PM > To: ironruby-core@rubyforge.org > Subject: Re: [Ironruby-core] Mocking behavior between clr types > > Hi Ivan, > > I was thinking Mono.Cecil first and then the CLR profiling API as I'm pretty > sure that will work. I used a similar approach for > http://blog.benhall.me.uk/2008/11/net-fault-injection-very-early-proof- > of.html > but the fault injection was done via some Microsoft Research stuff. > Either approach your re-writing IL, it just depends which layer you work > with. > > Lots of interesting problems to solve. Then it would just need a nice Ruby > wrapper so it's transparent to the end user - ideally incorporating the > backend work into Caricature. > > Ben > > On Sun, Jan 24, 2010 at 8:34 PM, Ivan Porto Carrero <i...@flanders.co.nz> > wrote: > > You don't need to do anything as drastic as disassemble dlls though :). > > There are several solutions and I think the cleanest one is to use the > > CLR profiling API. Another avenue I could take is to use Mono.Cecil > > but I don't like the idea of the IL rewriting stuff. heck even > > postsharp would probably do the trick. > > I need to look into the CLR profiling API to make the rest of the > > stuff happening as that is the cleanest solution IMO. The limitation > > only exists if you're mocking CLR classes for use in other CLR > > classes. If you're going to use it in ruby code you can do whatever you > want. > > My mocker does most of what Moq and Rhino.Mocks do, except that it > > doesn't use LCG or expression trees but just the reflection API once > > per type. from there on out it uses ruby to do its job. > > What I need to add but don't know if they are really necessary are > > call count constraints. > > And I also want to make the RSpec integration a little bit better so > > that you can enlist an expectation for verification too. > > The docs are a bit outdated too, best is to look into > > spec/bacon/integration that's where I test out the new features or syntax > additions. > > I have a chapter in my book that explains the use of Caricature with > > RSpec which will be in the update at the end of january. Contact me > > off list if you want a discount :) > > --- > > Met vriendelijke groeten - Best regards - Salutations Ivan Porto > > Carrero > > Blog: http://flanders.co.nz > > Twitter: http://twitter.com/casualjim > > Author of IronRuby in Action (http://manning.com/carrero) > > > > > > > > On Sun, Jan 24, 2010 at 8:16 PM, andrew Wilson <a.wilso...@gmail.com> > wrote: > >> > >> Ivan, > >> > >> Seems like a what I was looking for, however according to the > >> documentation it says it can only mock virtuals and non-static though. > >> > >> I don't want that restriction :( One of the advantages I was hoping > >> to leverage was the ability to re-write methods that I wouldn't > >> otherwise be able to. > >> > >> -A > >> > >> -- > >> When I wrote this, only God and I understood what I was doing. Now, > >> God only knows - Karl Weierstrass > >> > >> _______________________________________________ > >> Ironruby-core mailing list > >> Ironruby-core@rubyforge.org > >> http://rubyforge.org/mailman/listinfo/ironruby-core > >> > > > > > > _______________________________________________ > > Ironruby-core mailing list > > Ironruby-core@rubyforge.org > > http://rubyforge.org/mailman/listinfo/ironruby-core > > > > > _______________________________________________ > Ironruby-core mailing list > Ironruby-core@rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core