You can't. At least not with Rhino.Mocks.
This really leads to a discussion on Inversion of Control (IOC) and
Dependency Injection (DI). What you have now is a hard dependency on
a new "B" inside A.getValue(). This makes maintenance and mods harder
in the long run. What I would suggest, and this would lead to more
testable code, is to pass in a factory interface to class A's
constructor. That factory will be responsible for creating B. By
doing it this way, you could inject a stub "B" by injecting a stub
factory. Something like this:
public interface IBeeFactory
{
B Create();
}
public class A
{
private readonly IBeeFactory bFactory;
public A(IBeeFactory bFactory)
{
this.bFactory = bFactory;
}
public string getValue()
{
string retVal = "";
B b = bFactory.Create();
retVal = b.getB();
retVal = retVal + " Final ";
return retVal;
}
}
Now your test can be something like this:
var factory = MockRepository.GenerateStub<IBeeFactory>();
factory.Stub(f => f.Create()).Return(new B());
var a = new A(factory);
Assert.AreEqual("BStubFinal", a.getValue());
NOTE: Just banged the code out quickly. Be wary of errors.
---
Patrick Steele
http://weblogs.asp.net/psteele
On Fri, Jun 15, 2012 at 1:16 AM, alwaysgo <[email protected]> wrote:
> Hi,
>
> I need help figuring out how I can change the method call inside of another
> method.
>
> For example:
>
> public class A
> {
> public string getValue()
> {
> string retVal = "";
> B b = new B();
>
> retVal = b.getB();
> retVal = retVal + " Final ";
> return retVal;
> }
> }
>
> public class B
> {
> public string getB()
> {
> return "B";
> }
> }
>
> public class BStub
> {
> public string getBStub()
> {
> return "BStub";
> }
> }
>
> public class TestDriver
> {
> public static void Main()
> {
> A aClass = MockRepository.GenerateMock<A>();
> B bClass = MockRepository.GenerateStub<B>();
>
> bClass.Stub(x=>x.getB()).Return(new BStub().getBStub())
> .Do(new Func<string>(()=>new
> BStub().getBStub()));
>
>
> string result = aClass.getValue(); //I am not getting any value to
> result
> //In this case, I
> want to get "BStub Final" after calling
> // getValue()
> method on 'aClass'
>
> }
>
> }
>
> Any help would be appreciated.
>
> Thanks
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Rhino.Mocks" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rhinomocks/-/lvq3GMbEl9cJ.
> 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.
--
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.