Как использовать NSubstitute, чтобы издеваться над ленивым классом - PullRequest
9 голосов
/ 14 ноября 2011
//Assert
Lazy<INotificationService> notificationService = Substitute.For<Lazy<INotificationService>>();
Service target = new Service(repository, notificationService);

//Act
target.SendNotify("Message");

//Arrange
notificationService.Received().Value.sendNotification(null, null, null, null);

Приведенный выше код вызывает исключение.

Тип с ленивой инициализацией не имеет открытого конструктора без параметров

Я использую C # 4.0 и NSubstitute 1.2.1

1 Ответ

10 голосов
/ 15 ноября 2011

Согласно комментарию @ sanosdole, я бы предложил использовать реальный экземпляр Lazy для возврата вашего заменителя.Что-то вроде:

var notificationService = Substitute.For<INotificationService>();
var target = new Service(repository, new Lazy<INotificationService>(() => notificationService));

target.SendNotify("Message");

notificationService.ReceivedWithAnyArgs().sendNotification(null, null, null, null);
...