代码之家  ›  专栏  ›  技术社区  ›  Russell Giddings

Moq模拟扩展方法

  •  133
  • Russell Giddings  · 技术社区  · 14 年前

    我有一个预先存在的接口。。。

    public interface ISomeInterface
    {
        void SomeMethod();
    }
    

    public static class SomeInterfaceExtensions
    {
        public static void AnotherMethod(this ISomeInterface someInterface)
        {
            // Implementation here
        }
    }
    

    我有一个类叫这个,我想测试。。。

    public class Caller
    {
        private readonly ISomeInterface someInterface;
    
        public Caller(ISomeInterface someInterface)
        {
            this.someInterface = someInterface;
        }
    
        public void Main()
        {
            someInterface.AnotherMethod();
        }
    }
    

    还有一个测试,我想模拟接口并验证对扩展方法的调用。。。

        [Test]
        public void Main_BasicCall_CallsAnotherMethod()
        {
            // Arrange
            var someInterfaceMock = new Mock<ISomeInterface>();
            someInterfaceMock.Setup(x => x.AnotherMethod()).Verifiable();
    
            var caller = new Caller(someInterfaceMock.Object);
    
            // Act
            caller.Main();
    
            // Assert
            someInterfaceMock.Verify();
        }
    

    但是,运行此测试会生成异常。。。

    System.ArgumentException: Invalid setup on a non-member method:
    x => x.AnotherMethod()
    

    我的问题是,有没有一个很好的方法来模拟混音通话?

    5 回复  |  直到 14 年前