2017-02-27 78 views
0

我对CodedUI测试自动化框架非常陌生。我遇到了TestContext,它有关于测试结果输出和目录的重要信息。 其实我创建了一个静态Logger类,它将输出数据写入.txt文件。现在我想在TestResults文件夹下创建它。每次我运行测试方法时,它都会创建一个文件夹,然后是一些时间戳。我想在该位置创建我的Results.txt文件。 下面是我使用的代码:我们可以将TextContext.TestDeploymentDir值分配给静态类数据成员吗?

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

构造函数打算做什么? 'var fs'的范围局限于空'using'块,所以除了可能清空输出流之外,它没有任何有用的作用。 – AdrianHHH

+0

@AdrianHHH我只是截断日志文件。没有指定的逻辑来做任何事情。只需在这里清空文件。 –

回答

0

您将需要将logLocation标记为静态,因为它包含在静态类中。这很愚蠢,但是静态类的所有成员也需要被标记为静态。我相信这是为了防止在阅读较大的类时出现混淆,因为您看不到类声明。接下来您当前的错误消息也说TestContextTestDeploymentDir未标记为静态,并且如果可能的话,您还需要修改它。如果没有,你需要实现一个单例模式来提供该类的一个实例的静态副本。根据班级工作的方式,这可能会也可能不会。

+0

'TestContext'是系统定义的dll的抽象类。不知道我是否可以在那做任何修改。此外,我已经尝试使'logLocation'为静态,但它仍然显示相同的错误。 –

+0

所以你肯定会需要保持'logLocation'静态。由于编译器还没有到那么远,你只是没有得到那个错误。如果'TestContext'是一个抽象类,'TestDeploymentDir'是一个实例成员(你的错误是这么说的),你将需要实现抽象类(从它继承并实现标记为抽象的任何成员),然后创建一个单例模式让你成为一个静态实例。然后您可以在字段初始值设定项中访问该静态实例。有点烦人,但完全有可能。 – Licht

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

相关问题