unit-testing Proprietà dell'iniezione


Esempio

L'iniezione di proprietà consente di aggiornare le dipendenze delle classi dopo che è stata creata. Questo può essere utile se vuoi semplificare la creazione dell'oggetto, ma permetti comunque che le dipendenze vengano sovrascritte dai test con raddoppia test.

Considera una classe che deve scrivere su un file di log in una condizione di errore. La classe sa come costruire un Logger predefinito, ma consente di eseguirne l'override tramite l'iniezione di proprietà. Tuttavia vale la pena notare che usando l'injection di proprietà in questo modo si sta strettamente accoppiando questa classe con un'esecuzione esatta di ILogger che è ConcreteLogger in questo esempio. Una soluzione possibile potrebbe essere una fabbrica che restituisce l'implementazione necessaria di ILogger.

public class RecordProcessor
{
    public RecordProcessor()
    {
        Logger = new ConcreteLogger();
    }

    public ILogger Logger { get; set; }

    public void DoSomeProcessing()
    {
        // ...
        _logger.Log("Complete");
    }
}

Nella maggior parte dei casi, Iniezione costruttore è preferibile a Iniezione proprietà perché fornisce migliori garanzie sullo stato dell'oggetto immediatamente dopo la sua costruzione.