嘲弄兄弟姐妹的方法

时间:2011-04-21 03:48:33

标签: c# interface mocking

假设我有以下内容,我希望进行单元测试:

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()?我假设类的设计可能不正确。我有一种情况,我们有一个具有大量接口的服务层,偶尔有一个服务层功能会调用另一个(使用相同或不同的接口)。我不确定如何模拟其他服务层方法,因为你不能真正依赖注入某些东西。任何人都可以给我一些关于这种情况和建议的清晰度吗?

2 个答案:

答案 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

此致 约翰