(Ho più familiarità con Java, Junit e mockito - quindi quello che scrivo qui di seguito è basato su la mia comprensione di questo si applica a ciò che riesco a trovare)
Stai cercando uno strumento di simulazione come Moq .
In questo scenario ciò che faresti è prendere in giro l'oggetto che contiene DiscountService.
A questo punto, dovresti fare qualcosa di simile (non ho modo di verificare se il seguente codice è corretto per il framework, ma è nella giusta direzione):
public void Test() {
var mockService = new Mock<IDiscountService>();
SomeClass.ApplyDiscount(1, 0.0);
mockService.Verify(
mockService = foo.ApplyDiscount(), Times.Once());
}
E questo verificherà che il servizio sconti sia stato chiamato una volta (e solo una volta) quando è stata effettuata la chiamata a ApplyDiscount con il parametro specificato.
Ti informerò che la struttura di questo codice che hai pubblicato su psuedocoded sembra anche sospetta. L'int è passato e quello che sembra essere qualcosa che vuole essere un'istruzione switch odori come se volessi essere polimorfismo.
Considera che se il test è difficile da scrivere, a volte significa che il design del sistema è sbagliato e dovrebbe essere rivisitato. Il codice ben scritto tende ad essere facile da testare.
Tuttavia, vorrai leggere su Moq e usarlo nei posti giusti (come verificare che qualcosa sia stato chiamato il numero appropriato di volte senza inserire il codice di prova nel tuo codice reale - che ha un odore ancora peggiore di quello degli interruttori).