【问题标题】:Webdriver & .Net - TimeZoneInfo.ClearCachedData() does not clear TimeZone cacheWebdriver & .Net - TimeZoneInfo.ClearCachedData() 不清除 TimeZone 缓存
【发布时间】:2013-07-02 05:10:14
【问题描述】:

每次我填写表格时,我正在自动化的应用程序都需要一个唯一的参考号,我在大多数测试中都使用DateTime.Now 作为我的唯一参考号:

public static string Today = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

当我通过 Visual Studio 为每个测试运行这些测试时,我会得到一个唯一的 DateTime.Now;这是正确的行为。但是,当我通过 Nunit GUI 或 TeamCity CI 运行相同的测试时,DateTime.Now 会从第一次测试运行中被缓存,因此所有测试都失败了。

我尝试在每次测试运行后在我的 TearDown 部分中使用 TimeZoneInfo.ClearCachedData()

    [AfterScenario]
    public static void TearDown()
    {
        CultureInfo.CurrentCulture.ClearCachedData();
        TimeZoneInfo.ClearCachedData();
        driver.Quit();
    }

但是当我通过 Nunit GUI 或 TeamCity 运行时,这不会清除缓存。我曾尝试使用 DateTime.UtcNow 并在设置部分中移动 ClearCachedData 代码,但这些选项都不适合我。

以前有人解决过这个问题吗?

【问题讨论】:

  • 如果您使用 Visual Studio 运行一系列测试,您会遇到同样的问题吗?
  • 解决方案:.我已将字符串定义为静态,删除它解决了问题: public string Today = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
  • ClearCachedData 的用途完全不同。你可以删除它。

标签: .net caching webdriver timezone


【解决方案1】:

这是因为静态字段会被初始化一次,然后保持它的值。

您已经删除了static 部分,您不必这样做。只需将其设为属性,以便在每次访问时都会生成它的值:

public static string Today { get { return DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } }

NUnit 的 GUI 和 TeamCity 将在一个线程中启动整个套件。因此,您最初拥有的静态字段实际上只会加载一次并保持其值。

【讨论】:

  • 很好的描述 Arran,谢谢。因为我不完全理解 Nunit GUI 和 TC 将在一个线程中启动整个套件。
  • @BennyMeade - static 不是每个线程,而是每个进程。所有实例和所有线程共享相同的值。如果您真的想要每个线程的值,可以使用[ThreadStatic]
猜你喜欢
  • 2012-10-07
  • 2017-01-30
  • 2014-02-04
  • 2023-04-04
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
相关资源
最近更新 更多