【问题标题】:How do you fake the system time for a system under test that runs in a separate process?您如何伪造在单独进程中运行的被测系统的系统时间?
【发布时间】:2012-02-03 12:59:51
【问题描述】:

我们正在通过 Selenium 的 GUI 自动化执行带有 SpecFlow 的 Gherkin 功能/场景。使用的 Web 服务器是 CassiniDev,如 this SO answer 中所述。

很多场景(又名示例)包括如下逻辑:

Given the customer does something
When some time elapse
Then ...

如何伪造在单独进程中运行的被测系统的系统时间,就像我们在上面描述的示例测试的验收/规范中一样?

(对于与 SUT 在同一进程中执行的普通单元/集成测试,假系统时间问题通过使用我们自己的 SystemDateTime 类型解决,这允许我们更改 Now() 返回的内容(a公共 lambda expr)。)

【问题讨论】:

  • 你没有在你的......“问题”中提出一个问题。相反,您为问题标题中提出的问题提供了解决方案,这让我们有 0 + 1 - 1 = 0 个问题要回答;-)
  • 问题是:“如何伪造在单独进程中运行的被测系统的系统时间?”我会将它添加到正文中以增加清晰度。
  • 如果您在问题正文中重复已经解决的问题,它不会增加任何清晰度。您正在使用自己的 SystemDateTime 类型解决问题。这种类型不依赖于测试运行的位置 - 那么问题是什么?
  • @MartinR-L: 也许你只需要修改负责处理some time elapse 的代码来相应地设置你的SystemDateTime 对象?
  • 如果您可以在单元测试中显示SystemDateTime 的用法,也许会有所帮助。

标签: c# windows integration-testing


【解决方案1】:

我通过让网络应用程序的引导检查是否使用假系统时钟解决了这个问题。

我在 web.config 中添加了一个标志。如果为真,则从环境变量中读取假日期+时间。

示例/场景只是相应地设置标志和环境变量作为其给定步骤的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多