如何撤消moq Mock的Setup调用?

时间:2018-05-17 15:15:45

标签: nunit moq

这可能是我在这里处理的特殊用例。这是我使用Moq的简单C#NUnit测试看起来像

Mock<ISomeRepository> mockR = new Mock<ISomeRepository>();
mockR.Setup(x => x.GetSomething).Returns(new Something(a=1,b=2);
--use the mocked repository here

现在稍后在同一个单元测试或另一个测试用例中,我想在这个mockR对象上调用方法GetSomething()的实际实现。 有没有办法做到这一点?我的存储库是Singleton的核心。因此,即使我创建了一个新对象,GetSomething方法仍然会返回相同的Moq&lt; d&gt;对象。

2 个答案:

答案 0 :(得分:1)

这在很大程度上取决于您GetSomething的实施情况,这是您未在此处展示的内容;)。另外,我不确定即使是有效的设置,也不应该有.Setup(..).Returns(..)吗?

答案 1 :(得分:1)

模拟用于表示类的依赖关系,允许在不使用实际依赖项的情况下测试该类。或者您可以进行涉及实际依赖性的测试。

但是使用模拟依赖项和相同单元测试中的真实依赖听起来好像你不清楚你的测试是在测试什么。

如果它是另一个测试用例,它也不应该是个问题。每个测试不应该影响另一个测试,所以如果你单独设置测试类应该没问题,即使是一个单例。

我假设您正在注入单身依赖项。如果没有,那就这样做。