我正在尝试开发一个自动回归测试框架作为单元测试。所以我使用有序测试来组合不同的测试步骤,并以一种易于使用的方式组合它们。出于配置目的,我想使用runsettings文件,尤其是 TestRunParameters。这在没有任何错误的情况下有效,但仅在单独执行每个测试时才有效。如果我使用orderedtest执行测试,则TestContext我用来访问 TestRunParameters 的对象不再包含它们。我在直接测试该方法以及使用有序测试对其进行测试时调试了该对象。在第一种情况下,对象具有所需的属性,但是当按顺序执行测试时,对象看起来完全不同。这两种执行方式之间是否存在重大差异?
不同的 TestContext 对象:
我得到的错误如下:
Ergebnis StackTrace: at Regression.FileSystem.FileSystemTestInitializer(TestContext context) in \FileSystem.cs:line 18
Ergebnis Meldung: Class Initialization method Regression.FileSystemTestInitializer threw exception. System.NullReferenceException: System.NullReferenceException: Object reference not set to an instance of an object..
我执行以测试和加载设置的代码如下:
namespace Regression
{
[TestClass]
public class FileSystem
{
private static Logger logger = LogManager.GetCurrentClassLogger();
private static Dictionary<String, String> runSettings = new Dictionary<String, String>();
[ClassInitialize]
public static void FileSystemTestInitializer(TestContext context)
{
runSettings.Add("scenarioName", context.Properties["scenarioName"].ToString());
runSettings.Add("testRootDir", context.Properties["testRootDir"].ToString());
}
[TestMethod]
public void Action_FileSystem_CleanUp()
{
DirectoryInfo dir = new DirectoryInfo(runSettings["testRootDir"] + runSettings["scenarioName"] + @"\testdata\");
foreach(FileInfo file in dir.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo childDir in dir.GetDirectories())
{
childDir.Delete(true);
}
DirectoryCopy(runSettings["testRootDir"] + runSettings["scenarioName"] + @"\testdata_backup\", runSettings["testRootDir"] + runSettings["scenarioName"] + @"\testdata\", true);
}
错误出现在第 11 行,如下所示:
runSettings.Add("scenarioName", context.Properties["scenarioName"].ToString());
包含在 Visual Studio 的测试执行中的 runsettings 文件:
<RunSettings>
<!-- Parameters used by tests at runtime -->
<TestRunParameters>
<Parameter name="scenarioName" value="FileSystem_SharePointOnline_Unidirectional"/>
<Parameter name="testRootDir" value="C:\testfiles\"/>
</TestRunParameters>
</RunSettings>