【问题标题】:Assert.AreEqual on two objects but ignore DateTime properties两个对象上的 Assert.AreEqual 但忽略 DateTime 属性
【发布时间】:2013-10-31 19:03:06
【问题描述】:

我有一个单元测试,我在其中模拟具有 DateTime 属性的结果,该属性在我执行操作时设置 - “CreatedOn”属性。由于我无法同时创建结果并执行操作,因此我的 Assert.AreEqual 总是失败。如何测试我的两个对象是否相同,除了某些 DateTime 字段?

【问题讨论】:

  • 你能展示你的测试方法代码吗?我认为如果你在嘲笑某事的结果,那么你可以提供任何返回值,任何 CreatedOn 属性值

标签: .net unit-testing


【解决方案1】:

这里真的有两种选择:

  1. 在创建时间之后更改CreatedOn 以使属性匹配。考虑到您的 API,这可能会也可能不会。
  2. 创建一个检查所有其他属性的方法,但忽略CreatedOn 属性。就用那个。这实际上只是多个 Assert.AreEqual 调用,但在单个属性上,而不仅仅是整个对象。

【讨论】:

  • 这听起来像是最简单的解决方案,但不是那么健壮。我想我可能会暂时这样做,直到找到一种简单而可靠的方法。
【解决方案2】:

我通常会做以下事情之一:

  • 您可以为您的 SUT 创建 TimeProvider 依赖项并使用该提供程序来获取当前日期。这将允许您设置任何当前日期。
  • 如果您要比较的对象由 SUT 依赖项之一返回,那么您可以设置模拟依赖项以返回与您在测试中检查的完全相同的对象实例。

【讨论】:

  • 这听起来像是最强大的解决方案,但会使实现过于复杂。
  • @rushonerok 不幸的是,在真正的单元测试中,您应该模拟所有外部资源(数据库、文件等),并且当前时间也是作为配置文件的外部资源,所以是的,它应该被模拟 :)
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多