Kann nicht erstellen Sie eine Mock-Klasse für eine interne Typ mit Rhino Mocks

Ich bin mit Rhino Mocks als ein mocking-framework für unit-Tests.

Habe ich eine Klasse namens Thema, das ist die Klasse die ich testen will. Es hat eine Abhängigkeit von IStore.

IStore ist wie folgt definiert:

//internal interface : has InternalsVisible to both "Subject" 
//and "StoreTests" class namespaces
internal interface IStore {
    void Store(string name);
    //other methods
}

und das Thema Klasse ist wie folgt definiert:

class Subject : IStore {
    private IStore internalStore;

    //constructor injection
    void Subject(IStore store) {
        internalStore = store;
    }

    void Store(string name) {
        internalStore.Store(name);
    }

    //other methods
}

Meiner test-Klasse mit RhinoMocks ist wie folgt:

//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
}

In meinem setup, die Benutzeroberfläche ist definiert als die interne, und es hat InternalsVisible Satz sowohl Subjekt-Klasse und StoreTests Klasse. Allerdings, wenn der Testfall ausgeführt wird, löst eine Ausnahme aus, bei der var mockStore = MockRepository.GenerateMock();
zu sagen, dass IStore ist nicht öffentlich und daher könnte es nicht schaffen, eine Mock.

Ich denke, das ist, weil der IStore ist nicht öffentlich. Aber da habe ich InternalsVisibleTo auf dem IStore dll, wird es nicht ausreichend für StoreTests erstellen Sie ein mock für die Klasse?

Nun ich denke, das problem kann gelöst werden, indem die Schnittstelle IStore öffentlichkeit. Aber da dies keine option für mich, gibt es eine andere Möglichkeit kann ich erstellen ein mock für den IStore ?

InformationsquelleAutor Santhosh | 2011-07-28
Schreibe einen Kommentar