Estoy usando Rhino Mocks como un marco burlón para pruebas unitarias.No se puede crear una clase falsa para un tipo interno usando Rhino Mocks
Tengo una clase llamada Subject, que es la clase que quiero probar. Tiene una dependencia en IStore.
istore se define de la siguiente manera:
//internal interface : has InternalsVisible to both "Subject"
//and "StoreTests" class namespaces
internal interface IStore {
void Store(string name);
//other methods
}
y la clase de sujeto se define como sigue:
class Subject : IStore {
private IStore internalStore;
//constructor injection
void Subject(IStore store) {
internalStore = store;
}
void Store(string name) {
internalStore.Store(name);
}
//other methods
}
Mi clase de prueba usando RhinoMocks es el siguiente:
//test class
class StoreTests {
Subject subject = new Subject();
[Test]
public StoreTest() {
//Arrange
var mockStore = MockRepository.GenerateMock<IStore>();
string testName = "test";
mockStore.Expect(x => x.Store(testName)).Returns(null);
//Act
subject.Store(testName);
//Assert
mockStore.VerifyAllExpectations();
}
//other test methods
}
En mi configuración, la interfaz se define como interna y tiene InternalsVisible configurado tanto para la clase Subject como para Sto devuelve la clase. Sin embargo, cuando el caso de prueba se ejecuta, arroja una excepción en var mockStore = MockRepository.GenerateMock(); diciendo que IStore no es público y, por lo tanto, no pudo generar un simulacro.
Creo que esto se debe a que el IStore no es público. Sin embargo, como he configurado InternalsVisibleTo en el dll del IStore, ¿no será suficiente que StoreTests cree un simulacro para esa clase?
Ahora creo que este problema se puede resolver haciendo pública la interfaz de IStore. Sin embargo, dado que esto no es una opción para mí, ¿hay alguna otra forma en que pueda crear un simulacro para IStore?
¡Gracias por el enlace! Ahora funciona. – Santhosh