在下面的示例中,我想测试该TestMe.DoSomething()
功能。
我想模拟ISomething
此方法中使用的接口并使其返回不同的值(取决于特定的单元测试。)
在现实生活中,ISomething
界面最终调用了昂贵的 3rd 方资源——我绝对不想只调用一个真正的ISomething
.
这是示例结构:
class TestMe
{
public void DoSomething()
{
ISomething s = SomethingFactory();
int i = s.Run();
//do things with i that I want to test
}
private ISomething SomethingFactory()
{
return new Something();
}
}
interface ISomething
{
int Run();
}
class Something : ISomething
{
public int Run()
{
return 1;
}
}
这是不起作用的代码:
var fakeSomething = new Mock<ISomething>();
var testMe = new TestMe();
Mock.Get(testMe).Setup(p => p.SomethingFactory()).Returns(fakeSomething.Object);
testMe.DoSomething();
因为SomethingFactory()
is private
,我无法将该方法的返回值设置为我想要的。
关于如何解决这个问题的任何建议?