¿Cómo puedo agitar las propiedades. Objeto de condición cuando la prueba unitaria está en un ensamblaje diferente?

StackOverflow https://stackoverflow.com/questions/1885644

Pregunta

Tengo un objeto las referencias un montón de Properties.Settings.Default... valores y necesito agitarlos en la prueba unitaria para este objeto.

Desafortunadamente, el tipo para el objeto de configuración se declara como internal Y entonces no puedo acceder al proyecto de prueba unitaria.

¿Cómo puedo aclarar los valores de retorno para estas propiedades? Estoy usando simulacros de rinocerontes para burlarse.

¿Fue útil?

Solución

En general, no lo haría. En lugar de que sus objetos "internos" realmente lean propiedades.settings.default, haz que declaren una propiedad c -configuable (ya sea en el momento de la construcción o por propiedades), y haga que otra pieza de código las complete.

De esa manera, puede probar todo menos las cosas de lectura predeterminadas en sus pruebas unitarias, y se acopla menos a una forma de leer los valores predeterminados, lo que hace que sea más fácil cambiar el mecanismo en el futuro.

Otros consejos

Además, otro consejo que puede encontrar útil para evitar el problema interno, en realidad puede hacer que su código interno sea visible para sus pruebas unitarias. En el código que está probando, abra su ensamblajeinfo.cs y agregue algo como lo siguiente:

#if UNITTEST
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("YourUnitTestAssembly")]
#endif

Entonces solo necesita el símbolo unitest definido en su compilación y su ensamblaje de pruebas podrá ver a todos los miembros internos.

Sé que esta es una pregunta antigua, pero pensé que agregaría mi solución como simple y podría ayudar a alguien.

La clase de configuración creada es una clase parcial, podemos aprovecharla para crear nuestra propia implementación de valor predeterminado.

Cree un nuevo archivo en la carpeta Propiedades

internal partial class Settings : ISettings
{
    private static ISettings _setInstance;

    internal static ISettings Get
    {
        get
        {
            return _setInstance = _setInstance  ?? Default;
        }
        set { _setInstance = value; }
    }
}

Luego, cuando lo usamos en otra parte de la aplicación, podemos llamar a Configuración.

Si sus pruebas se encuentran en un proyecto separado, deberá agregar otra clase para exponer al setter a público. No podemos cambiar el archivo de configuración al público, ya que esto simplemente se sobrescribiría la próxima vez que cambiemos o agregamos un valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top