我们可以将TextContext.TestDeploymentDir值分配给静态类数据成员吗?

时间:2017-02-27 15:11:41

标签: c# visual-studio-2015 coded-ui-tests

我是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.不确定如何解决此错误或是否可能?

2 个答案:

答案 0 :(得分:0)

您需要将logLocation标记为静态,因为它包含在静态类中。这有点傻,但静态类的所有成员也需要标记为静态。我相信这是为了防止在阅读较大类时无法看到类声明的混淆。接下来,您当前的错误消息也会显示TestContextTestDeploymentDir未标记为静态,如果可能,您还需要修改它。如果不是,则需要实现单例模式以提供该类实例的静态副本。根据课程的运作方式,可能会也可能不会。

答案 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中的附件出现,我们可以看到输出。