使用Moq模拟一个接口

4

在我查找/阅读答案的同时,我也想在这里提问。

我有一个包装SDK的类。该类接受一个ILoader对象,并使用ILoader对象创建一个ISBAObject,然后将其转换为ISmallBusinessInstance对象。我只是尝试使用Moq模拟这种行为。

   [TestMethod]
    public void Test_Customer_GetByID()
    {
        var mock = new Mock<ILoader>();

        var sbainst = new Mock<ISbaObjects>();

        mock.Expect(x => x.GetSbaObjects("")).Returns(sbainst);


    }

编译器错误提示:错误1 最佳重载方法匹配 'Moq.Language.IReturns.Returns(Microsoft.BusinessSolutions.SmallBusinessAccounting.Loader.ISbaObjects)' 具有一些无效参数。
这是怎么回事?我期望 ISbaObjects 的 Mock 能够被轻松返回,但出现了问题。
2个回答

9
您需要使用sbainst.Object,因为sbinst不是ISbaObjects的实例 - 它只是模拟部分。

2

更新的、正确的代码

[TestMethod]
public void Test_Customer_GetByID()
{
    var mock = new Mock<ILoader>();

    var sbainst = new Mock<ISbaObjects>();

    mock.Expect(x => x.GetSbaObjects("")).Returns(sbainst.Object);


}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接