Puede usar la inyección de dependencia de constructor. Ejemplo:
public class SingletonDependedClass
{
private string _ProviderName;
public SingletonDependedClass()
: this(ConfigurationManager.ConnectionStrings["main_db"].ProviderName)
{
}
public SingletonDependedClass(string providerName)
{
_ProviderName = providerName;
}
}
Eso permite pasar cadena de conexión directamente al objeto durante la prueba.
Además, si utiliza el marco de prueba de Visual Studio Team Edition, puede hacer que el constructor con parámetro privado y probar la clase a través del descriptor de acceso.
En realidad resuelvo ese tipo de problemas con la burla. Ejemplo:
tiene una clase que depende de Singleton:
public class Singleton
{
public virtual string SomeProperty { get; set; }
private static Singleton _Instance;
public static Singleton Insatnce
{
get
{
if (_Instance == null)
{
_Instance = new Singleton();
}
return _Instance;
}
}
protected Singleton()
{
}
}
public class SingletonDependedClass
{
public void SomeMethod()
{
...
string str = Singleton.Insatnce.SomeProperty;
...
}
}
En primer lugar los SingletonDependedClass
necesita ser reprogramado para tomar Singleton
ejemplo como parámetro constructor:
public class SingletonDependedClass
{
private Singleton _SingletonInstance;
public SingletonDependedClass()
: this(Singleton.Insatnce)
{
}
private SingletonDependedClass(Singleton singletonInstance)
{
_SingletonInstance = singletonInstance;
}
public void SomeMethod()
{
string str = _SingletonInstance.SomeProperty;
}
}
Prueba de SingletonDependedClass
(Moq mocking library se usa):
[TestMethod()]
public void SomeMethodTest()
{
var singletonMock = new Mock<Singleton>();
singletonMock.Setup(s => s.SomeProperty).Returns("some test data");
var target = new SingletonDependedClass_Accessor(singletonMock.Object);
...
}
¿Cuál es el mensaje de error exacto? – Kane
Excepción de puntero nulo – yeyeyerman