mocking - 我应该在生产代码中使用模拟吗?

标签 mocking moq

我有一种情况需要mock生产中的一些代码。这是为了使一部分代码工作在一半功能上。

我必须选择编写一个空类(实现接口(interface)),或者使用 moq 之类的模拟系统。

所以问题是,做模拟系统达到性能 , 或 打破一些可读性生产代码?

更新
例子:

interface IRocketSystem
{
   void LaunchTheRocket();
}

class SimulationRocketSystem:IRocketSystem
{
...
}

class RocketSystem:IRocketSystem
{
...
}

我发现我在生产中有一个 SimulationRocketSystem 类,那么小而且体内没有很多。模拟系统有一行代码( new Mock < IRocketSystem >().Object )来替换这样的类。

mock 的优点:
项目中的空类较少。

最佳答案

听起来像 Null Object .我不相信为此使用模拟框架有两个原因。

首先,它损害了可读性。您使用适当命名的空类实现接口(interface),然后记录该类中的意图。另一方面,如果您使用模拟框架,您的文档需要嵌入到代码中的某个位置。此外,这会让人感到困惑,因为人们倾向于在测试代码中期待模拟,而不了解您使用模拟的意图。

其次,您必须考虑如果有人修改界面会发生什么。如果添加一个方法怎么办?它是否应该默认返回 null - 就像某些框架会做的那样?如果方法必须根据接口(interface)约定返回一些具体的返回值。如果您有具体的实现,那么编译器至少会在一定程度上保护您。如果您使用模拟框架,您可能会不走运。

关于mocking - 我应该在生产代码中使用模拟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211689/

相关文章:

c# - 使用 xUnit 测试 Controller

c# - 为什么我的模拟列表没有删除某个元素?

java - arraylength 中操作数堆栈上的错误类型

java - Ploeh 的 AutoFixture for .Net 是否有 Java 替代品?

javascript - 未调用方法上的 Sinon.spy

c# - 如何最小起订量 Sitecore 用户对象?

c# - 使用 Moq 模拟 Delegate.Invoke() 在 LINQ 中抛出 InvalidCast 异常

c# - 使用 UnitOfWork 模拟上下文和存储库

java - JMockit:覆盖@Mocked类

python - 在文件顶部导入的模拟函数