Невозможно создать Mock-класс для внутреннего типа с помощью Rhino Mocks

Я использую Rhino Mocks в качестве фреймворка для имитации модульного тестирования.

У меня есть класс Subject, который я хочу протестировать. Он зависит от IStore.

IStore определяется следующим образом:

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

, а класс Subject определяется следующим образом:

class Subject : IStore {
    private IStore internalStore;

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

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

    //other methods
}

Мой тестовый класс с использованием RhinoMocks выглядит следующим образом:

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

В моей настройке интерфейс определен как внутренний, и для него установлен InternalsVisible как для класса Subject, так и для класса StoreTests. Однако, когда тестовый пример выполняется, он генерирует исключение в var mockStore = MockRepository.GenerateMock (); говоря, что IStore не является общедоступным и поэтому не может создать Mock.

Я думаю, это потому, что IStore не является публичным. Однако, поскольку я установил InternalsVisibleTo в dll IStore, будет ли StoreTests достаточно создать макет для этого класса?

Теперь я думаю, что эту проблему можно решить, сделав интерфейс IStore общедоступным. Однако, учитывая, что это не вариант для меня, есть ли другой способ создать макет для IStore?

18
задан Santhosh 28 July 2011 в 07:49
поделиться