gpt4 book ai didi

c# - 出于单元测试目的,如何更改 "today' 的日期?

转载 作者:太空狗 更新时间:2023-10-29 23:11:32 26 4
gpt4 key购买 nike

我使用针对 .NET 2.0 Framework 的 VS2008,以防万一,不,我不能改变它:)

我有一个 DateCalculator 类。它的方法 GetNextExpirationDate 尝试确定下一个过期时间,在内部使用 DateTime.Today 作为基准日期。

在编写单元测试时,我意识到我想针对不同的“今天”日期测试 GetNextExpirationDate

执行此操作的最佳方法是什么?以下是我考虑过的一些替代方案:

  • 使用参数baselineDate 公开属性/重载方法,并且仅在单元测试中使用它。在实际的客户端代码中,忽略属性/重载方法,支持将 baselineDate 默认为 DateTime.Today 的方法。我不愿意这样做,因为它会使 DateCalculator 类的公共(public)接口(interface)变得尴尬。
  • 创建一个名为 baselineDate 的 protected 字段,该字段在内部设置为 DateTime.Today。测试时,从 DateCalculator 派生一个 DateCalculatorForTesting 并通过构造函数设置 baslineDate。它使公共(public)接口(interface)保持干净,但仍然不是很好 - baselineDate 受到保护并且需要派生类,两者都仅用于测试。
  • 使用扩展方法。我在添加 ExtensionAttribute 后尝试了这个,然后意识到它不起作用,因为扩展方法无法访问私有(private)/ protected 变量。我最初认为这确实是一个非常优雅的解决方案。 :(

我很想听听别人的想法。

最佳答案

您可以使用提供基线日期的界面。通常您会使用一个返回 DateTime.Today 的实现,但出于测试目的,有一个让您的单元测试提供日期的实现。

如果有必要在数据库服务器或不一定是运行代码的其他机器上使用当前日期,这也很有用。

事实上,这是同一个问题,但比我的答案更详细:Unit Testing: DateTime.Now

关于c# - 出于单元测试目的,如何更改 "today' 的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com