我自动化的应用程序在每次填写表单时都需要一个唯一的参考编号,我在大多数测试中都使用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代码,但这些选项都不适用于我。
之前有没有人克服过这个问题?
答案 0 :(得分:1)
这是因为静态字段将初始化一次,然后保持其值。
您已删除了static
部分,但您无需这样做。只需将其设为属性,以便在每次访问时生成它的值:
public static string Today { get { return DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } }
NUnit的GUI和TeamCity将在一个线程中启动整个套件。所以你原来的静态字段只会被加载一次并保持它的值。