gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:29:48 24 4
gpt4 key购买 nike

我以这种方式设置了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com