假设我有以下内容,我希望进行单元测试:
class Foo: IAMethods, IBMethods
{
// Implementation of IAMethods.A()
public int A()
{
return B() + 1;
}
// Implementation of IBMethods.B()
public int B()
{
return 1;
}
}
如何在调用A()时模拟B()?我假设类的设计可能不正确。我有一种情况,我们有一个具有大量接口的服务层,偶尔有一个服务层功能会调用另一个(使用相同或不同的接口)。我不确定如何模拟其他服务层方法,因为你不能真正依赖注入某些东西。任何人都可以给我一些关于这种情况和建议的清晰度吗?
答案 0 :(得分:2)
看一下Moq的at partial mocks(RhinoMocks有类似的东西)。至少你必须虚拟。
public virtual int B()
{
return 1;
}
在你的考试中......
Mock<Foo> mock = Mock<Foo>();
mock.Setup(m => m.B()).Returns(5);
int result = mock.Object.A(4);
Assert.That(result, Is.EqualTo(9));
C#不允许使用mixins,但是您可以通过单独的类实现每个接口,然后顶级服务类可以通过组合将调用委托给它们。
答案 1 :(得分:0)
您可以创建Visual Studio项目模板以帮助您进行模拟。请参阅Creating Item Templates。
此致 约翰