AutoMocker Вопрос - PullRequest
       24

AutoMocker Вопрос

0 голосов
/ 19 декабря 2010

Я пытаюсь протестировать свои контроллеры, но у каждого из них есть зависимость от службы, которая зависит от хранилища. У меня есть следующий код ...

Mock.Get(controller.Get<ServiceInterface>())
            .Setup(s => s.GetData())
            .Returns(FakeData.Create<Entity>(25));

Я получаю сообщение об ошибке, связанное с конкретным классом ServiceInterface, не имеющим экземпляр по умолчанию для своего хранилища (внедренный) Я пытаюсь избежать создания FakeService, но похоже, что это то, что я собираюсь сделать. Кто-нибудь может предложить несколько предложений?

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

В моем ответе на этот вопрос показано, как вы можете запрограммировать свои службы для выполнения интерфейса, использовать этот интерфейс в качестве зависимости, а затем смоделировать службу, чтобы помочь вам в модульном тестировании.

Редактировать

Не имея опыта работы с MoqAutoMocker, мой совет несколько ограничен.Но я бы начал с попытки использовать Moq напрямую и посмотреть, не вызывает ли это у вас каких-либо проблем.

var serviceMock = new Mock<IService>();
serviceMock.Setup(r => r.GetData())
    .Returns(FakeData.Create<Entity>(25));
var controller = new MyController(serviceMock.Object);

После того, как вы убедились, что это работает, вы можете ввести в него аспект автомоделирования:

var autoMocker = new MoqAutoMocker<MyController>();
Mock.Get(autoMocker.Get<IService>()).Setup(r => r.GetData())
    .Returns(FakeData.Create<Entity>(25));
MyController controller = autoMocker.ClassUnderTest;
0 голосов
/ 20 декабря 2010

Какие классы вы пытаетесь протестировать и какие классы вы пытаетесь заглушить? Я предполагаю, что вы пытаетесь протестировать свой контроллер и хотите заглушить свой сервис. Если это так, то конкретная реализация вашего сервиса и, следовательно, его зависимости вообще не должны участвовать в вашем тесте и не должны иметь значения. Вам нужно только заглушить поведение сервисного интерфейса, необходимого для тестирования вашего контроллера.

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

...