![]() |
1
10
听起来像 Null Object . 我不相信为此使用模拟框架有两个原因。 首先,它损害可读性。使用适当命名的空类实现接口,然后在该类中记录意图。另一方面,如果使用模拟框架,则需要将文档嵌入代码中的某个地方。此外,它将是混乱的,因为人们倾向于期望在测试代码中模拟,而不理解您使用模拟的意图。 其次,您必须考虑如果有人修改接口会发生什么。如果添加了方法怎么办?它应该像某些框架那样默认地返回空值吗?如果方法 必须 根据接口合同返回一些特定的返回值。如果您有一个具体的实现,那么编译器至少会在一定程度上保护您。如果你使用一个模拟框架,你可能会走运。 |
![]() |
2
9
模拟对象是您用于测试的对象,因为它可以让您断言它是正确调用的。在我看来,您要查找的更像是存根或代理对象。 既然您最终将实现所讨论的类,那么让一个模拟框架为您完成这项工作是毫无意义的,imo。为什么不创建这个类并根据需要实现它呢? |
![]() |
3
6
空课怎么了? 事实上,它将被一个真正的类所取代,所以您也可以从一个真正的类开始。 我想用任何形式的模拟代码 外部 测试是一项坏政策。 |
![]() |
4
2
你称之为“嘲弄”,但似乎你所做的只是恰当地分离关注。 在if语句上使用多态性来控制应该发生什么是一件好事。
例如,假设您希望日志记录是可选的。当务之急是提供
但是,如果您将实际的日志代码作为对另一个对象的关注点而分开,那么您可以将该对象设置为执行所需操作的对象。除了拥有一个空路由的日志记录程序(代表日志记录被禁用)和一个实际写入文件的日志记录程序外,它还允许您提供一个日志记录对象,该对象将写入数据库而不是文件,它允许您向日志记录程序添加功能,例如日志文件旋转。 这只是一个很好的面向对象编程。 |
![]() |
5
2
这可能有点不寻常,所以我会在我的评论等中明确指出这是必需的功能。否则会有人对测试代码是如何进入生产的感到非常困惑! 至于性能,和以往一样,您需要测量它,因为它是如此具体。不过,我冒昧地猜测,由于您在模仿尚未编写的功能,它很可能是 快得多 而不是你的模拟实现。这是您可能需要向用户介绍的内容,因为当您提供最终的功能实现时,他们很可能会看到性能下降:—) 这个 真实的 解决方案是为现有接口提供一个虚拟实现,并稍后提供真正的实现。 |
![]() |
6
1
我不太了解性能问题。但是,imho,你必须非常小心可读性。声明一个或多个接口并以两种不同的方式实现不是更好吗? --编辑 模拟可能更容易,使用更少的代码行,但它会增加代码的学习曲线。如果新来的人看到你的代码,他需要更多的时间来理解。就我个人而言,我认为这是代码的一个尚未实现的特性。但是如果有另一个接口实现,或者其他一些好的设计决策,我会更快地“得到它”,并且随着代码的更改感觉更安全。 嗯,这是个人意见。您的代码将使用与预期不同的模式。它类似于“配置上的约定”。如果您不使用该约定,那么配置它应该会比较困难(在您的情况下,记录并清楚您正在做什么)。 |
![]() |
7
1
我的建议-不要把它投入生产。不要将任何东西投入生产中,因为它会减慢生产速度,破坏生产,或者导致你失去工作:) 但比我想的更重要的是,你的公司政策是什么?你的经理怎么想?你不应该想独自做出这样的决定,这叫cya。 |
![]() |
8
-1
将它包装在专用的facade/adapter组件中并使用内部类就足够了。如果需要在系统中传递空类,则会出现问题。 |
![]() |
Phil Gunning · 使用嵌套函数更改进行模拟测试 3 年前 |
![]() |
Korr · 如何用Jest模拟组件测试中服务的功能 3 年前 |
![]() |
Jordan Lee · 在另一个类中使用实例方法作为装饰器 7 年前 |
![]() |
user2350138 · 为WireMock构建Java项目 7 年前 |
|
user8584384 · 单元测试不起作用,因为导入的文件作为输入 7 年前 |
![]() |
Vino · 如何模拟Python类的对象? 7 年前 |
![]() |
Enrico · .NET核心ASP。带有会话和测试的NET控制器 7 年前 |