如何找到非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程序的c#入口点

非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出现故障时的截图功能