我已经浏览了之前的所有答案,但没有一个能解决我的问题。
假设我有以下代码:
public interface ISomeInterface
{
int SomeMethod(int a, string b);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个常见的模拟类,它定义了上述方法的一些默认行为
public class CommonMock
{
public Mock<ISomeInterface> MockInterface = new Mock<ISomeInterface>().Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(It.IsAny<int>());
}
Run Code Online (Sandbox Code Playgroud)
我需要一些默认行为,因为我有很多需要默认行为的测试用例。
但在某些特定的测试场景中,在完全独立的测试类中,我需要能够在测试某些特定的测试用例时返回不同的值。
像下面这样:
[Test]
public void TestSomeMethodSpecific()
{
var commonMock = new CommonMock();
commonMock.MockInterface.Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(42);
// Do some test based on the new return value
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
下面我附上一些实际代码:
通用设置
public class MockStore
{
public Mock<IProcessHandler> ProcessHandler = new Mock<IProcessHandler>();
ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(It.IsAny<int>());
}
Run Code Online (Sandbox Code Playgroud)
测试类中覆盖的设置
var mockstore = new MockStore();
mockStore.ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(25);
Run Code Online (Sandbox Code Playgroud)
大约有 50 到 70 个这样的模拟,每个模拟都从简单类型返回到复杂类。
那应该有效吗?如果您在方法上创建后续设置并且它是无条件的(对参数没有限制),那么它将删除该方法的所有先前设置。
你可以在这里看到我的答案,它用源代码解释了它。
如果您希望多个有条件的设置根据参数返回不同的值,请参阅如何使用模拟为不同的参数设置方法两次。
在没有看到完整代码的情况下,也许您已经在使用条件设置。在这种情况下,顺序很重要,也许您正在用更通用的设置覆盖早期的设置。
| 归档时间: |
|
| 查看次数: |
10698 次 |
| 最近记录: |