Test unitari (NUnit/xUnit)
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 67 di 70.
Sfida
FacileCompleta il tuo progetto Library System aggiungendo i test unitari! I test sono essenziali per assicurarti che il codice funzioni correttamente e continui a funzionare quando apporti modifiche. Creerai un file di test dedicato che verifica le funzionalità principali del tuo sistema di biblioteca.
Continuerai a lavorare con la struttura esistente del progetto, aggiungendo un nuovo file di test:
Book.cs: Mantieni la tua classe Book conId,Title,Author,IsAvailablee i metodiBorrow()eReturn().User.cs: Mantieni la tua classe User con il monitoraggio dei prestiti, la costanteMaxBooks,CanBorrow()e i metodi per gestire i libri presi in prestito.Library.cs: Mantieni la tua classe Library con la logica dei prestiti, i metodi di ricerca e i metodiGetAllBooks()eGetAllUsers().LibraryTests.cs: Questo è il tuo nuovo file di test! Crea una classe di test che verifica che il tuo sistema di biblioteca funzioni correttamente. Scriverai metodi di test che controllano diversi scenari e indicano se ogni test ha esito positivo o negativo.Program.cs: Il punto di ingresso che esegue i test e mostra i risultati.
La tua classe di test dovrebbe includere metodi che verificano questi scenari:
TestBookBorrow- Verifica che il prestito di un libro disponibile riesca e ne modifichi la disponibilitàTestBookBorrowUnavailable- Verifica che il tentativo di prendere in prestito un libro già in prestito fallisca correttamenteTestUserBorrowingLimit- Verifica che gli utenti non possano prendere in prestito più di 3 libriTestBookReturn- Verifica che la restituzione di un libro preso in prestito funzioni correttamenteTestSearchByAuthor- Verifica che la ricerca per autore restituisca i libri corretti
Ogni metodo di test dovrebbe restituire un valore booleano che indica se il test è stato superato. Crea un semplice esecutore di test che esegua tutti i test e stampi i risultati.
Riceverai i seguenti input:
- Numero di scenari di test da eseguire (1-5, corrispondenti ai test elencati sopra)
Per ogni test eseguito, stampa il risultato nel formato:
{TestName}: {PASS|FAIL}Al termine di tutti i test, stampa un riepilogo:
--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}Ad esempio, se l'input è:
3L'output dovrebbe essere:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3Un altro esempio con tutti e 5 i test:
5L'output dovrebbe essere:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5I tuoi test dovrebbero creare nuove istanze di Book, User e Library per ogni test, così da garantire l'isolamento. In questo modo, lo stato di un test non influisce su un altro. Considera ogni test come una verifica autonoma di un comportamento specifico del tuo sistema!
Provalo tu
using System;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Leggi il numero di test da eseguire
int numTests = Convert.ToInt32(Console.ReadLine());
// TODO: Crea un oggetto LibraryTests ed esegui i primi numTests test
}
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studenti9Argomenti variabili
La parola chiave 'params'Parametri opzionaliArgomenti con nomeOverloading dei metodi12Progetto: Sistema bibliotecario
Struttura del progettoModelli di libri e utentiLogica del sistema di prestitoRicerca con LINQInterfaccia console / interfaccia amministratoreTest unitari (NUnit/xUnit)Esercitati da solo: Compilatore C# online