Your code works as-is. Here's a complete test case that fails because I changed your code to pass "b" to Method3() instead of "a". If you change it to pass "a", it passes (as expected):
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var provider = MockRepository.GenerateStub<IProv>();
var a = MockRepository.GenerateStub<IObj>();
var b = MockRepository.GenerateStub<IObj>();
provider.Stub(x => x.Method1()).Return(a);
provider.Stub(x => x.Method2()).Return(b);
var consumer = MockRepository.GenerateMock<ICon>();
consumer.Expect(x => x.Method3(Arg<IObj>.Is.Equal(a)));
var sut = new Sut(provider, consumer);
sut.DoWork();
consumer.VerifyAllExpectations();
}
}
public class Sut
{
private readonly IProv provider;
private readonly ICon consumer;
public Sut(IProv provider, ICon consumer)
{
this.provider = provider;
this.consumer = consumer;
}
public void DoWork()
{
var a = provider.Method1();
var b = provider.Method2();
consumer.Method3(b);
}
}
public interface ICon
{
void Method3(IObj obj);
}
public interface IObj
{
}
public interface IProv
{
IObj Method1();
IObj Method2();
}