It was using postsharp, IIRC.
Tuna Toksöz Eternal sunshine of the open source mind. http://devlicio.us/blogs/tuna_toksoz http://tunatoksoz.com http://twitter.com/tehlike On Sun, Apr 19, 2009 at 5:41 PM, Jonathon Rossi <[email protected]> wrote: > That would be nice, but I am not aware of any way this is possible with the > CLR, unless you change the IL of the actual class you want to proxy (e.g. > PostSharp). > > > On Mon, Apr 20, 2009 at 12:10 AM, Tim Barcz <[email protected]> wrote: > >> I've heard, I think (I could be crazy), that future releases of >> DynamicProxy won't require virtual. This was discussion point in an >> NHibernate discussion I was having at one point. >> >> Tim >> >> >> On Sun, Apr 19, 2009 at 8:04 AM, Kenneth <[email protected]> wrote: >> >>> >>> Tim, >>> >>> Given another thought, I found a variation of adapter approach. With >>> the help of an internal variable, I was able to test using RhinoMocks >>> (see code below). But I still wish I can directly Mock the interface >>> methods regardless of the virtual declaration of the implementation. I >>> know Spring.Net proxy is able to do this, never used Castle so I >>> cannot say for that. Maybe I'll take a look at the RhinoMocks souce >>> code when I have some time to spend. :) Thanks again! >>> >>> Cheers, >>> Kenneth >>> >>> public class MyClass : DoNotOwn, IDoNotOwn { >>> internal IDoNotOwn self; >>> >>> public MyClass() { >>> self = this; >>> } >>> >>> public new int Outer(int y) { >>> return self.DirtyWork(y * y); >>> } >>> } >>> >>> [Test] public void UsingRhinoMocks() { >>> const int workResult = 293848; >>> MockRepository mockery = new MockRepository(); >>> var o = new MyClass {self = mockery.CreateMock<IDoNotOwn> >>> ()}; >>> Expect.Call(o.self.DirtyWork(4)).Return(workResult); >>> mockery.ReplayAll(); >>> Assert.That(o.Outer(2), Is.EqualTo(workResult)); >>> mockery.VerifyAll(); >>> } >>> >>> >>> On Apr 18, 7:33 pm, Kenneth <[email protected]> wrote: >>> > Thanks Tim. That's exactly what I mean. It is the non-virtual method. >>> > I don't know if you get a chance to look at my real world code. My >>> > class is inheriting from Spring.Net's AdoTemplate, which has over 100 >>> > of overloaded methods that I need to adapter. And further I need to >>> > write over 100 test cases for those adapting methods. >>> > >>> > I often rewrite my code when I found it becomes difficult to test and >>> > the result was mostly a better design. But not this time. I was able >>> > to write a Stub my self to complete the test, you can see the solution >>> > using my own Stub instead of Rhino Mocks. >>> > >>> > The solution for the fiction code using my own Stub is provided in my >>> > blog post, let me include it here and I believe Rhino Mocks should (if >>> > not now, theoretically can in future :)) be able to do the same. See >>> > the MyClassStub and the test below. >>> > >>> > [Test] public void UsingMyStub() { >>> > const int workResult = 293848; >>> > MyClassStub stub = new MyClassStub(); >>> > IDoNotOwn o = stub.ExpectCallDirtyWork(4).WillReturn >>> > (workResult); >>> > Assert.That(o.Outer(2), Is.EqualTo(workResult)); >>> > stub.VerifyAll(); >>> > } >>> > >>> > private class MyClassStub : MyClass, IDoNotOwn { >>> > private int _expectedI, _returnValue; >>> > private bool _isCalled; >>> > internal MyClassStub ExpectCallDirtyWork(int i) { >>> > _expectedI = i; return this; >>> > } >>> > >>> > internal MyClassStub WillReturn(int value) { >>> > _returnValue = value; return this; >>> > } >>> > >>> > internal void VerifyAll() { >>> > Assert.IsTrue(_isCalled, "Call to DirtyWork was not >>> > made."); >>> > } >>> > >>> > public new int DirtyWork(int i) { >>> > Assert.That(i, Is.EqualTo(_expectedI)); >>> > Assert.IsFalse(_isCalled, "Duplicated call to >>> > DirtyWork."); >>> > _isCalled = true; >>> > return _returnValue; >>> > } >>> > } >>> > >>> > Kenneth >>> > >>> > On Apr 18, 6:35 pm, Tim Barcz <[email protected]> wrote: >>> > >>> > > I believe if it's not virtual you're in trouble. >>> > >>> > > Can you try adapting your code with the adapter pattern (see what I >>> did >>> > > there? :-)) and then you can mock... >>> > >>> > > Tim >>> > >>> > > On Sat, Apr 18, 2009 at 4:22 PM, Kenneth <[email protected]> wrote: >>> > >>> > > > Hello, >>> > >>> > > > I got stuck trying to mock the non-virtual implementation of >>> interface >>> > > > method. Here is a fiction code: >>> > > > public interface IDoNotOwn { >>> > > > int DirtyWork(int x); >>> > > > int Outer(int y); >>> > > > } >>> > >>> > > > public class DoNotOwn : IDoNotOwn { >>> > > > public int DirtyWork(int x) { >>> > > > // do something that hard for unit test to setup. >>> > > > throw new Exception("Don't call me in unit test"); >>> > > > } >>> > >>> > > > public int Outer(int y) { >>> > > > return DirtyWork(y + y); >>> > > > } >>> > > > } >>> > >>> > > > public class MyClass : DoNotOwn, IDoNotOwn { >>> > > > public new int Outer(int y) { >>> > > > return ((IDoNotOwn)this).DirtyWork(y*y); >>> > > > } >>> > > > } >>> > >>> > > > [TestFixture] public class MyClassTest { >>> > > > [Test] public void UsingRhinoMocks() { >>> > > > const int workResult = 293848; >>> > > > MockRepository mockery = new MockRepository(); >>> > > > IDoNotOwn o = mockery.CreateMock<MyClass>(); >>> > > > Expect.Call(o.DirtyWork(4)).Return(workResult); >>> > > > mockery.ReplayAll(); >>> > > > Assert.That(o.Outer(2), Is.EqualTo(workResult)); >>> > > > mockery.VerifyAll(); >>> > > > } >>> > > > } >>> > >>> > > > That doesn't work. It didn't generate the mock method and call >>> right >>> > > > into the real DirtyWork. I have also tried MultiMock with interface >>> > > > and etc. Couldn't get it to work. For more detail, you can see it >>> at >>> > >>> > > > >>> http://kennethxu.blogspot.com/2009/04/rhino-mocks-strikes-to-mock-non... >>> > >>> > > > And I have a real word test case that now I wrote my own stub >>> class: >>> > > > The test case: >>> > >>> > > > >>> http://code.google.com/p/kennethxublogsource/source/browse/trunk/Spri... >>> > >>> > > > And the code to be tested: >>> > >>> > > > >>> http://code.google.com/p/kennethxublogsource/source/browse/trunk/Spri... >>> > >>> > > > Thanks, >>> > > > Kenneth >>> >>> >>> >> >> >> > > > -- > Jono > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino.Mocks" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/RhinoMocks?hl=en -~----------~----~----~----~------~----~------~--~---
