Soy muy nuevo en los simulacros y estoy tratando de reemplazar un campo privado con un objeto simulado. Actualmente, la instancia del campo privado se crea en el constructor. Mi código es el siguiente ...¿Cómo me burlo de un campo privado?
public class Cache {
private ISnapshot _lastest_snapshot;
public ISnapshot LatestSnapshot {
get { return this._lastest_snapshot; }
private set { this._latest_snapshot = value; }
}
public Cache() {
this.LatestSnapshot = new Snapshot();
}
public void Freeze(IUpdates Updates) {
ISnapshot _next = this.LastestSnapshot.CreateNext();
_next.FreezeFrom(Updates);
this.LastestSnapshot = _next;
}
}
Lo que estoy tratando de hacer es crear una unidad de prueba que afirma ISnapshot.FreezeFrom(IUpdates)
se llama desde dentro Cache.Freeze(IUpdates)
. Supongo que debería reemplazar el campo privado _latest_snapshot
con un objeto simulado (¿tal vez suposición incorrecta?). ¿Cómo voy a hacer eso mientras aún conservo un constructor sin parámetros y no recurro a hacer público el conjunto de LatestSnapshot
?
Si me voy por completo a escribir la prueba de la manera equivocada, por favor, sírvase señalar también.
La implementación real de ISnapshot.FreezeFrom
llama a una jerarquía de otros métodos con un gráfico de objeto profundo, por lo que no estoy demasiado interesado en afirmar el gráfico de objetos.
Gracias de antemano.
¿Qué pasa si una clase bajo prueba utiliza un campo privado que representa una base de datos. ¿Cómo me burlo de ese campo de base de datos? – Vanuan
desea conocer el patrón de repositorio, que básicamente oculta el almacén de datos detrás de un conjunto de interfaces para que puedan ser burladas y probadas fácilmente – Jason
Aún así, ¿cómo construye ese repositorio simulado y lo pasa al consumidor? ¿Necesita un setter o un parámetro constructor? – Vanuan