2011-11-14 5 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); 

Il codice precedente genera un'eccezione.Come utilizzare NSubstitute per deridere una classe pigra

Il tipo pigramente-inizializzato non ha un pubblico, costruttore senza parametri

Sto usando C# 4.0 e NSubstitute 1.2.1

+1

Davvero vuoi sostituire il Lazy ? Immagino che Lazy <> lavori e usi il costruttore Value Factory di esso, fornendo Substitute.Per () come Value Factory ... – sanosdole

+0

+1 al commento di @ sanosdole. Ho postato questa risposta come wiki della comunità. –

risposta

9

Come da @ di sanosdole commento, vi suggerirei di usare un vera istanza Lazy per restituire il sostituto. Qualcosa di simile:

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

target.SendNotify("Message"); 

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