Estoy usando Teststack.White para iniciar e interactuar con una GUI. El modelo está oculto detrás de una fachada, lo que permite inyectar un simulacro de prueba en la GUI. La GUI carga con éxito el simulacro de prueba y Teststack.White puede iniciar la aplicación.

¿Cómo puedo acceder a mi singleton usando Teststack.White.Application o medios de este tipo?

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;
    }

Actualmente estoy investigando el uso de AppDomains, pero como esta aplicación se está ejecutando en su proceso ganado, no puedo ver cómo lo haría. Necesito obtener Singleton para configurar y evaluar mis pruebas.

2
Johannes 20 ene. 2017 a las 17:26

2 respuestas

La mejor respuesta

Creo que la única forma de hacerlo es utilizando algún tipo de comunicación entre procesos.

Hay muchos ejemplos en google aquí en SO aquí o aquí

0
Community 23 may. 2017 a las 10:29

Debe usar la reflexión, el primer paso es cargar el ensamblaje que contiene la clase Hook usando Assembly.Load o Assembly.LoadFrom, luego usar Assembly.CreateInstance o Activator.CreateInstance o AppDomain.CreateInstanceAndUnwrap y pasar el tipo de clase Hook, ahora no puede crear el singleton desde afuera y luego llamar a CreateInstance para crearlo ya que tiene un ctor privado; de lo contrario, debe usar otros medios como GetMethod e Invoke desde el tipo Hook Singleton para acceder a sus métodos, lo cual es demasiado complicado.

Sin embargo, le sugiero que cree la clase como clase normal y mantenga una instancia singleton en la aplicación de prueba, así que asegúrese de marcar su clase Hook como clase pública con el constructor público y en el proyecto de prueba cree una propiedad / variable estática pública para contener el creó la clase con reflexión y luego puede acceder a la clase Singleton Hook en cualquier lugar de la aplicación Prueba simplemente llamando a la propiedad estática.

0
YazX 28 ene. 2017 a las 10:56