2011-11-14 10 views
8
//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); 

El código anterior arroja una excepción.Cómo utilizar NSustituir para simular una clase perezosa

El tipo inicializado con pereza, no tiene un público, constructor sin parámetros

estoy usando C# 4.0 y NSubstitute 1.2.1

+1

¿Realmente desea sustituir el Lazy ? Simplemente asumiría que Lazy <> trabaja y usa el constructor de Value Factory, proporcionando Substitute.For () como Value Factory ... – sanosdole

+0

+1 al comentario de @ sanosdole. Han publicado esa respuesta como wiki de la comunidad. –

Respuesta

9

Según comentario de @ sanosdole, se recomienda usar una instancia real Lazy para devolver a su sustituto. Algo como:

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

target.SendNotify("Message"); 

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