Ah, ok I have solved my own problem within moments of posting :)

The last test should read:

[Test]
public void Test_MethodB_ShouldUseMethodA()
{
    //---------------Set up test pack-------------------
    const string otherReturnValue = "Hello Universe";
    MockRepository mockRepository = new MockRepository();
    MyClass myClass = mockRepository.PartialMock<MyClass>();
    myClass.Stub(t => t.MethodA()).Return(otherReturnValue);
    myClass.Replay();
    //---------------Assert Precondition----------------
    Assert.AreEqual(otherReturnValue, myClass.MethodA());
    //---------------Execute Test ----------------------
    string returnedString = myClass.MethodB();
    //---------------Test Result -----------------------
    string expected = string.Format("'{0}'", otherReturnValue);
    Assert.AreEqual(expected, returnedString);
}

I was missing the "myclass.Replay();" call.
I think that the basis for my mistake is that I usually use the AAA
syntax and stubs, and for Partial mocks I could not use this in the
normal way.
Is there any reason why there is no 'Partial Stub'?
All I would probably have needed was a static method on MockRepository
called something like "GeneratePartial<T>":

public static T GeneratePartial<T>(params object[]
argumentsForConstructor)
    where T : class
{
    MockRepository repository = new MockRepository();
    T obj = repository.PartialMock<T>(argumentsForConstructor);
    repository.Replay(obj);
    return obj;
}




On Sep 1, 12:53 pm, Mark Whitfeld <[email protected]> wrote:
> Firstly, thanks for an amazing Mocking framework. I especially love
> the type safety given using lambdas and the AAA syntax.
>
> My only problem has been with trying to do a partial mock.
> Many times I am testing for a specific method call on an interface,
> and I pretty much just want the rest of the methods on the interface
> to return something useful. So my first thought was to try to create a
> partial mock for a class that implements the interface and then just
> 'override' the specific method of the interface using Rhino Mocks.
> Not matter what I tried I couldn't get this to work. Any Suggestions?
>
> I also need to test the scenario where I need to check that one method
> on a class is using/calling another method on the class. I tried to
> use Partial mocks for this, but couldn't get that to work either. Is
> there something that I'm doing wrong?
>
> Here is a simple code sample. Please could you show me how to get the
> last test working. Thanks.
> Here it goes:
>
> public class MyClass
>     {
>         public virtual string MethodA()
>         {
>             return "Hello World";
>         }
>
>         public virtual string MethodB()
>         {
>             return string.Format("'{0}'", MethodA());
>         }
>     }
>
>     [TestFixture]
>     public class TestExample
>     {
>
>         [Test]
>         public void Test_MethodA_ShouldReturnHelloWorld()
>         {
>             //---------------Set up test pack-------------------
>             MyClass myClass = new MyClass();
>             //---------------Assert Precondition----------------
>             //---------------Execute Test ----------------------
>             string returnedString = myClass.MethodA();
>             //---------------Test Result -----------------------
>             const string expected = "Hello World";
>             Assert.AreEqual(expected, returnedString);
>         }
>
>         [Test]
>         public void Test_MethodB_ShouldReturnQuotedHelloWorld()
>         {
>             //---------------Set up test pack-------------------
>             MyClass myClass = new MyClass();
>             //---------------Assert Precondition----------------
>             //---------------Execute Test ----------------------
>             string returnedString = myClass.MethodB();
>             //---------------Test Result -----------------------
>             const string expected = "'Hello World'";
>             Assert.AreEqual(expected, returnedString);
>         }
>
>         [Test]
>         public void Test_MethodB_ShouldUseMethodA()
>         {
>             //---------------Set up test pack-------------------
>             const string otherReturnValue = "Hello Universe";
>             MyClass myClass = new MockRepository().PartialMock<MyClass>
> ();
>             myClass.Stub(t => t.MethodA()).Return
> (otherReturnValue).Repeat.Any();
>             myClass.Stub(t => t.MethodB()).CallOriginalMethod
> (OriginalCallOptions.NoExpectation);
>             //---------------Assert Precondition----------------
>             Assert.AreEqual(otherReturnValue, myClass.MethodA());
>             //---------------Execute Test ----------------------
>             string returnedString = myClass.MethodB();
>             //---------------Test Result -----------------------
>             string expected = string.Format("'{0}'",
> otherReturnValue);
>             Assert.AreEqual(expected, returnedString);
>         }
>     }
>
> Any Ideas?
>
> Thanks
> -Mark Whitfeld
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to