0

每次我填写表格时,我正在自动化的应用程序都需要一个唯一的参考号,我在大多数测试中都使用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它会从第一次测试运行中被缓存,因此所有测试都失败后。

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

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

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

以前有没有人克服过这个问题?

4

1 回答 1

1

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

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

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

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

于 2013-07-04T10:57:08.793 回答