我正在自动化的应用程序每次填写表格时都需要一个唯一的参考号,我在大部分测试中使用了 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;这是正确的行为。DateTime.Now
是第一次测试运行时的缓存,因此之后的所有测试都会失败。
我尝试使用 TimeZoneInfo.ClearCachedData()
在每次测试运行后,我的TearDown部分。
[AfterScenario]
public static void TearDown()
{
CultureInfo.CurrentCulture.ClearCachedData();
TimeZoneInfo.ClearCachedData();
driver.Quit();
}
但当我通过Nunit GUI或TeamCity运行时,这并不能清除缓存。我试过使用DateTime.UtcNow,也试过在设置部分移动ClearCachedData代码,但这些选项对我来说都不起作用。
以前有人克服过这个问题吗?
这是因为静态字段将被初始化一次,然后保持它的值。
你已经删除了 static
部分,你不一定要这么做。只要把它做成一个属性,这样它的值就会在每次访问时产生。
public static string Today { get { return DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } }
NUnit的GUI和TeamCity会在一个线程中启动整个套件。所以,你原来的静态字段将从字面上看只被加载一次,并保持它的值。