c# - 模拟内部函数的响应但测试外部函数

标签 c# unit-testing mocking

我用这种方式设置了 C# 代码。

public class Client : IClient
{
    public string funcA()
    {
       var output = funcB(1);
       //Do something on output and produce finalResult
       return finalResult;
    }

    public string funcB(int x)
    {
         // Some operations on produces string result
         return result;
    }
}

我想模拟 funcB 输出,但让 funcA 根据 funcB 的输出按原样执行。

在我的测试类中,我执行以下操作:

public class MockClient
{
    private Mock<IClient> _mockClient;

    public MockClient()
    {
        _mockClient = new Mock<IClient>();
    }

    [TestMethod]
    public void TestClient()
    {
        _mockClient.Setup(foo => foo.funcB(It.IsAny<int>())).Returns("test");
        var testOutput = _mockClient.Object.funcA();
    }
}

变量 testOutput 返回 NULL。我明白为什么,因为该对象是从接口(interface)创建的。我不确定如何准确解决这个问题。对此的任何意见都会有所帮助。

最佳答案

我假设您根据语法使用 Moq ?如果是这样,您可以使用“部分模拟”。示例:

将 funcB 更改为虚拟

public virtual string funcB(int x)
{
    // Some operations on produces string result
    return result;
}

然后模拟具体类型并将 CallBase 属性设置为 true:

[TestMethod]
public void TestClient()
{
    Mock<Client> _mockClient = Mock<Client>();
    _mockClient.CallBase = true;
    _mockClient.Setup(foo => foo.funcB(It.IsAny<int>())).Returns("test");
    var testOutput = _mockClient.Object.funcA();
}

关于c# - 模拟内部函数的响应但测试外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236235/

相关文章:

python - 在 python 中模拟 Http 连接

c# - 可以模拟自定义属性 c# 吗?

ios - 如何使用 OCMockito stub 类方法?

c# - 抽象类没有实现接口(interface)

python-3.x - 如何模拟 googleapiclient.discovery.build 以单元测试从谷歌表格读取

unit-testing - 流服务中的 Webmethods 模拟

spring - 如何测试 Controller 方法是否将请求转发到特定 URL?

c# - 具有多个客户端和 Web 界面的复杂套接字应用程序

c# - MemoryMappedFile 导致下一个 File.Open 需要很长时间

javascript - window.open() 没有以我传递给它的高度打开