如何找到非exe程序的c#入口点
本文关键字:入口 程序 exe 何找 | 更新日期: 2023-09-27 18:02:02
我读到的所有关于c#入口点类的信息都与:
static int Main(string[] args)
因为这是特定于EXE程序的。
但是我的程序是一个c#自动化测试框架(解决方案中的.cs),用Specflow特性文件和步骤定义设计。
我现在已经添加了一个名为Program.cs - Int Main类的(入口点)类,但我注意到,在运行自动化测试时,这个入口点类没有被调用。很可能是因为我的程序不是EXE程序,而是一个测试框架。
如何找到非exe程序的c#入口点?
因为我想使用利用我的"报告"代码从一个类,将调用每次我运行一个测试:
namespace Project.Core
{
public class Program
{
public static int Main(string[] args)
{
Adapter.DefaultSearchTimeout = 5000;
int error;
try
{
error = TestSuiteRunner.Run(typeof (Program), Environment.CommandLine);
}
catch (Exception e)
{
TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
Report.Screenshot();
throw new ApplicationException("Error Found", e);
}
return error;
}
}
}
非exe项目(即dll)没有入口点。它们是由其他进程调用的api,它们有自己的入口点。
您应该为SpecFlow使用的测试框架研究适当的"测试前"方法。例如,在MSTest中,这样的代码将放在签名为
的方法中。[TestInitialize]
public void TestInitialize()
{
// Your code
}
MSDN文档。
由于我的项目同时使用MsTest和Ranorex API,我无法确定项目的哪个方面在测试运行之前/期间被初始化。因此,我决定将Try/Catch代码结构直接添加到我的项目中的每个步骤定义方法中。
Try()
{
// code
}
Catch (Exception e)
{
TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
Report.Screenshot();
throw new ApplicationException("Error Found", e);
}
我可以很容易地将Catch代码移动到一个helper类中,这样我就只有一个在我的项目中使用的代码实例:
catch (Exception)
{
WpfHelpers.ExtensionMethods.CatchException(null);
}
助手类:
public static class ExtensionMethods
{
public static void CatchException(SystemException e)
{
TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
Report.Screenshot();
throw new ApplicationException("Error Found", e);
}
}
注意,我使用这个结构是为了能够使用Report。Ranorex出现故障时的截图功能