我是CodedUI测试自动化框架的新手。我遇到了TestContext
,其中包含有关测试结果输出和目录的重要信息。
实际上我已经创建了一个静态Logger
类,它将输出数据写入.txt
文件。现在我想在TestResults
文件夹下创建它。每次我运行测试方法时,它都会创建一个文件夹,后跟一些时间戳。我想在该位置创建我的Results.txt
文件。
以下是我正在使用的代码:
public static class Logger
{
string logLocation = TestContext.TestDeploymentDir + "\\Results.txt";
static Logger() {
File.Create(logLocation);
using (var fs = new FileStream(logLocation, FileMode.Truncate))
{
}
}
public static void ResultLog(int testcasenum,String Expected,String Actual, String textResult)
{
FileInfo outtxt = new FileInfo(logLocation);
StreamWriter logline = outtxt.AppendText();
logline.WriteLine("Test Case : " + testcasenum);
logline.WriteLine("{0},{1},{2}", "Expected - "+Expected, "Actual - "+Actual, "Result - "+textResult);
// flush and close file.
logline.Flush(); logline.Close();
}
}
现在我收到编译时错误说A field initializer cannot reference the non-static field, method, or property TestContext.TestDeploymentDir.
不确定如何解决此错误或是否可能?
答案 0 :(得分:0)
您需要将logLocation
标记为静态,因为它包含在静态类中。这有点傻,但静态类的所有成员也需要标记为静态。我相信这是为了防止在阅读较大类时无法看到类声明的混淆。接下来,您当前的错误消息也会显示TestContext
。TestDeploymentDir
未标记为静态,如果可能,您还需要修改它。如果不是,则需要实现单例模式以提供该类实例的静态副本。根据课程的运作方式,可能会也可能不会。
答案 1 :(得分:0)
最后想出了一种获取out
框架的Coded UI
路径的方法。以下是我写的代码:
public static class Logger
{
static string uripath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Results.txt";
public static string logLocation = new Uri(uripath).LocalPath;
static Logger() {
using (File.Create(logLocation))
{ }
using (var fs = new FileStream(logLocation, FileMode.Truncate)){}
}
public static void ResultLog(int testcasenum,String Expected,String Actual, String textResult)
{
FileInfo outtxt = new FileInfo(logLocation);
StreamWriter logline = outtxt.AppendText();
logline.WriteLine("Test Case : " + testcasenum);
logline.WriteLine("{0},{1},{2}", "Expected - "+Expected, "Actual - "+Actual, "Result - "+textResult);
// flush and close file.
logline.Flush(); logline.Close();
}
}
uripath
将包含与TestContext.TestDeploymentDir
相同的路径。现在Results.txt
将作为Test Explorer
中的附件出现,我们可以看到输出。