I have a class
public interface IMyInterface
{
string MethodA();
void MethodB();
}
public class MyClass : IMyInterface
{
public string MethodA()
{
// Do something important
}
public void MethodB()
{
string value = MethodA();
// Do something important
}
}
I want to unit test MethodB, but I’m having trouble thinking about how I can Mock MethodA while still calling into MethodB using Moq. Moq mocks the interface, not the class, so I can’t just call mock.Object.MethodB(), right?
Is this possible? If so, how?
I don’t think it is possible. Even it is possible I’d prefer not to do that.
You are testing behavior of
MyClass, the fact that it happen to implementIMyInterfaceis somewhat unrelated to testing behavior of MethodA and MethodB. You can have separate test that makes sure that class implements interfaces that you expect it to implement if necessary. Testing of MyClass.MethodB should be done on instance of MyClass, not on semi-mocked object.
If you think that behavior of MethodA is dependency you may try actually extract it explicitly from the class. It will allow to test both MethodA (which will simply delegate to the dependency) and MethodB (which will use the dependency and do more).