【问题标题】:internal class state when mocking with moq使用 moq 模拟时的内部类状态
【发布时间】:2014-05-21 00:55:54
【问题描述】:

我是 mocking 新手,我刚开始使用 moq。该工具表明我们可以使用 moq 来模拟 classes without interfaces。我想知道在模拟时是否可以保持类的内部状态。例如:

//define class for mocking
var mock = new Mock<ILoveThisFramework>();

//define
mock.Setup(framework => framework.DownloadExists("2.0.0.0"))
      .Returns(true)
      .AtMostOnce();

//use mocking tools to call methods and return defined results

问题: 尽管结果已定义,但内部状态(例如私有类变量)是否已更改? (保持班级状态?)

【问题讨论】:

  • 这是一个使用接口的例子,但我会模拟类

标签: c# mocking moq


【解决方案1】:

我假设您想要验证对象的私有或内部状态 - 您的被测单元。

在单元测试中,您不应该关心这一点。私有或内部状态不是您应该测试的。你可以,但你不应该。通常公共 API 和公共状态都包含在单元测试中。

关于这个主题已经有一些很好的答案,我会推荐你​​那里以获得更多选择:

【讨论】:

【解决方案2】:

我假设您是在询问在模拟上调用 DownloadExists 是否会更改模拟的 ILoveThisFramework 实例的类状态。

答案是否定的。您的基本方法没有被调用,只是由.Setup() 创建的模拟版本。

有一篇很长的博文 here 详细介绍了一种添加方式,以从您的模拟中调用基本方法,这可能是您想要做的。

但是,由于该对象是模拟的,您通常不会关心它的其他属性以及它们是否设置正确,因为它不是被测试的对象。如果被测对象确实关心 ILoveThisFramework 上的其他属性,那么这些属性也应该被模拟以返回预期的结果,而不是依赖于该类的内部正常工作。

【讨论】:

  • 在我的项目中,我需要以不同的方式对您进行模拟。所以我试图找到一种方法来调用方法,更改变量,同时模拟对另一个方法的内部调用。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-03-29
  • 2012-06-16
  • 2011-03-17
  • 2013-07-08
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多