2010-02-25 9 views
5

Al probar las clases de singleton, necesitamos que la única instancia se "apague" después de cada prueba. ¿Hay alguna manera de configurar nunit para recrear el dominio de la aplicación de prueba después de cada prueba, o al menos después de cada dispositivo?Se puede configurar nunit para eliminar el dominio de la aplicación por dispositivo (o por prueba)

+0

Si la configuración del Singleton es tan complejo que necesita ser probado cada vez que se llame, se puede reprimir la lógica de la creación en un método y luego probar ese método en su lugar? – roufamatic

Respuesta

0

Creo que me falta algo aquí Ralph. Solo para mi propio beneficio, ¿puede explicar por qué agregar métodos con los siguientes atributos a su clase de prueba que caen y recrean sus instancias no funcionaría para usted?

Agregar estos atributos para los métodos debe hacerlos ejecutar antes/después de cada prueba.

[SETUP]

[TearDown]

La incorporación de estos atributos para métodos deberían hacerlos correr antes/después de la fijación.

[TestFixtureSetUp]

[TestFixtureTearDown]

¿Existe una razón por la cual el uso de métodos con estos atributos no se puede crear y destruir su dominio entre las pruebas?

4

Puede proporcionar los medios para renovar la instancia de singleton cuando se prueba a través de un método condicional.

// CUT 
public sealed class Singleton{ 

    private static Singleton _instance = new Singleton(); 

    private Singleton() 
    { 
     // construct. 
    } 

    public static Singleton Instance{ 
     get{ 
      return _instance; 
     } 
    } 

    [Conditional ("DEBUG")] 
    public static void FreshInstance(){ 
      _instance = new Singleton(); 
    } 
} 


// NUnit 
[TestFixture] 
public class SingletonTests{ 

    [SetUp] 
    public void SetUp(){ 
     Singleton.FreshInstance(); 
    } 
} 
1

que tenía que hacer el exactamente lo mismo, por lo que creó una biblioteca que básicamente toma la prueba actual y vuelve a ejecutar en un nuevo dominio de aplicación. Es un paquete nuget llamado NUnit.ApplicationDomain y es open source.

Ejemplo de código:

[Test, RunInApplicationDomain] 
public void Method() 
{ 
    Console.WriteLine("I'm in a different AppDomain") 
} 
Cuestiones relacionadas