通过运行TestStack.White.Application使程序集中的Singleton成为可能

时间:2017-01-20 14:26:52

标签: c# ui-automation white

我使用Teststack.White启动并与GUI交互。 模型隐藏在外观后面,允许将测试模拟注入GUI。 GUI成功加载测试模拟和Teststack.White可以启动应用程序。

如何使用Teststack.White.Application或此类方法访问我的单例。

enter image description here

    /*Singleton in Mock.DLL that will allow test configurations*/
    class Hook
    {
        public Hook SingleHook { get; private set; } = new Hook();
        private Hook() { }
    }

    /*Loader in Nunit so far*/

    private Application apploader()
    {
        ProcessStartInfo info = new ProcessStartInfo(@"C:\MyGUI\MYWPFGUI.exe");
        info.WorkingDirectory = (@"C:\MyGUI\");
        TestStack.White.Application app = Application.Launch(info);
        return app;
    }

我目前正在调查使用AppDomains,但由于此应用程序在其赢得的过程中运行,我无法看到我将如何做到这一点。 我需要掌握Singleton才能设置和评估我的测试。

2 个答案:

答案 0 :(得分:0)

您需要使用反射,第一步是使用Assembly.Load或Assembly.LoadFrom加载包含Hook类的程序集,然后使用Assembly.CreateInstance或Activator.CreateInstance或AppDomain.CreateInstanceAndUnwrap方法并传递Hook类类型,现在你不能从外部创建单例,然后调用CreateInstance来创建它,因为它有私有ctor,否则你需要使用其他方法,如来自Hook Singleton类型的GetMethod和Invoke来访问它的方法太麻烦了。

但是,我建议您将类创建为普通类并在Test应用程序中保存单例实例,因此请确保将Hook类标记为具有公共构造函数的公共类,并在Test项目中创建公共静态属性/变量使用反射保存创建的类,然后只需调用静态属性即可访问Test应用程序中任何位置的Singleton Hook类。

答案 1 :(得分:0)

我认为唯一的方法就是使用某种inter process communication.

googlehere

上的here上有很多示例