2012-02-07 22 views
6

Así que aquí está el escenario, estoy refaccionando algunos códigos de spaghetti. Mi primer problema fue una cadena de clases que revivió otras clases, lo arreglé haciendo que el ctor de la clase que quiero probar (Search.cs) tome la clase que necesita como dependencia, se ve así ahora.Burlarse de una clase que hereda de otra clase

public Search(XmlAccess xmlFile, SearchDatabaseConnect searchDatabaseConnection) 
    { 
     this.xmlFile = xmlFile; 
     FsdcConnection = searchDatabaseConnection; 
     Clear(); 
    } 

Lo estoy renovando más arriba en la cadena. Eso está bien, pero tengo un pequeño problema.

La clase que estoy inyectando hereda de otra clase, tengo Resharper y he extraído las interfaces pero el problema es que la clase de dependencia hereda de otra clase concreta - ¿entiendes lo que quiero decir?

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // } 

No sé qué hacer con la herencia en DatabaseConnect? ¿Cómo me burlo de eso? Obviamente, si eso no estuviera allí, estaría todo listo, podría burlarme de ISearchDatabaseConnect y nos marchamos, pero estoy atascado en la herencia de una clase concreta. Estoy seguro de que la gente se ha topado con esto antes de que mi búsqueda fuera un fracaso a la hora de encontrar ejemplos sobre esto.

Gracias de antemano por cualquier sugerencia útil.

+1

Solo como referencia "newing it up" generalmente se llama instanciar ;-) –

+0

sí, gracias - es simplemente una cuestión de preferencia personal, me suele gustar el término "newing" porque a) es la palabra clave que usa el código (bien OK n ew es) yb) de alguna manera parece más divertido que el término instanciar. – Kenn

Respuesta

3

¿Tiene también una interfaz extraída de DatabaseConnect? Creo que debería ser capaz de configurarlo como:

public interface IDatabaseConnect 

public class DatabaseConnect : IDatabaseConnect 

public interface ISearchDatabaseConnect : IDatabaseConnect 

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 

Y ahora haciendo un Mock<ISearchDatabaseConnect> recibirá todas las "cosas" de las dos interfaces.


nota lateral, el método/constructor que probablemente debería tener en la interfaz, no el hormigón:

public Search(XmlAccess xmlFile, ISearchDatabaseConnect searchDatabaseConnection) { ... } 

esa manera se puede inyectar el simulacro, como:

var mockedSearchDatabaseConnect = new Mock<ISearchDatabaseConnect>(); 
var search = new Search(xmlFile, mockedSearchDatabaseConnect.Object); 
+0

Ah ... ¡Tan obvio! – Kenn

+0

sí, ¡claro! Veo a que te refieres. – Kenn

Cuestiones relacionadas