我正在尝试开发自动回归测试框架作为单元测试。因此,我使用有序测试来组合不同的测试步骤,并以易于使用的方式将它们组合在一起。出于配置目的,我想使用 runsettings 文件,尤其是TestRunParameters。这没有任何错误,但仅在执行每个测试时。如果我使用 orderedtest 执行测试,我用来访问TestRunParameters的 TestContext 对象不再包含它们。我在直接测试方法的同时对该对象进行了调试,同时也使用有序测试对其进行了测试。在第一个场景中,对象具有所需的属性,但是当按照orderedtest执行测试时,对象看起来完全不同。这两种执行方式之间是否存在主要差异?
不同的TestContext对象:
Execution as single test picture
Execution as ordered test picture
我得到的错误如下:
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());
runsettings文件,包含在visual studio的测试执行中:
<RunSettings>
<!-- Parameters used by tests at runtime -->
<TestRunParameters>
<Parameter name="scenarioName" value="FileSystem_SharePointOnline_Unidirectional"/>
<Parameter name="testRootDir" value="C:\testfiles\"/>
</TestRunParameters>
</RunSettings>