Mi viene detto che i modelli di Factory/Abstract Factory Design per scrivere i casi di Unit Test sono molto efficaci ma non sono riuscito a trovare alcun tutorial che lo dimostri chiaramente. Quindi sarà molto utile se qualcuno può indicarmi qualche tutorial esistente o darmi qualche pseudo codice e spiegazione qui :)Uso di fabbrica/Pattern di progettazione di fabbrica astratti in Unit Testing
risposta
Secondo GoF, l'intento del modello Abstract Factory è quello di fornire un'interfaccia per la creazione famiglie di oggetti correlati o dipendenti senza specificare le loro classi conrcete.
In quadri le fabbriche astratte sono in genere fornite utilizzando l'iniezione di dipendenza e questa è la vera chiave per scrivere codice che è facile da testare. Iniezione di dipendenza significa semplicemente che le dipendenze sono "iniettate" attraverso il costruttore, piuttosto che introdotte all'interno della classe.
Supponiamo di utilizzare due stabilimenti per la produzione di dipendenze (qui solo una dipendenza, dadi) per i giochi facili e duri di backgammon:
public class EasyGameFactory implements GameFactory
{
Dice createDice()
{
return new LuckyDice();
}
}
public class NormalGameFactory implements GameFactory
{
Dice createDice()
{
return new RandomDice();
}
}
A scopo di verifica unità che si sarebbe davvero preferisce utilizzare nessuna delle implementazioni dei dadi , quindi si scrive una speciale implementazione GameFactory:
public class CustomGameFactory implements GameFactory
{
private Dice mDice;
public CustomGameFactory(Dice dice)
{
mDice = dice;
}
Dice createDice()
{
return mDice;
}
}
Questa fabbrica non dovrebbe essere parte del vostro albero di codice di produzione. Si fornisce la fabbrica con una speciale implementazione dei dadi attraverso il codice di prova:
public class TestBackgammon
{
@Test public void shouldReturnDiceThrown()
{
SettableDice dice = new SettableDice();
Game game = new GameImpl(new CustomGameFactory(dice));
dice.setDice(new int[] {4, 5});
game.nextTurn();
assertArrayEquals(new int[] {4, 5}, game.diceThrown());
}
}
Con questo approccio qualsiasi dipendenza calcestruzzo può essere iniettato a scopo di test. Tuttavia, spesso lo stesso può essere ottenuto senza una fabbrica astratta, cioè piuttosto che iniettare una fabbrica, la dipendenza stessa può essere iniettata.
- 1. corretta Assert_Raise Unit Testing ed uso di Eccezione Classe
- 2. Unit Testing e di codificazione design
- 3. Unit Testing Interfaces in Python
- 4. Django unit testing per modulo di modifica
- 5. Unit Testing e PostSharp
- 6. Unit Testing MVC Controllers
- 7. Unit Testing Shiny Apps
- 8. Unit testing con un file di input
- 9. Unit Testing costruttore iniezione
- 10. Unit Testing pattern
- 11. Unit testing di RenderMvcController anche possibile?
- 12. PHP Unit testing
- 13. Unit Testing XQuery
- 14. Problema Unit Testing in VB.NET
- 15. Unit Testing Embedded Software
- 16. Unit Testing ViewController's Lifecycle
- 17. SingleResult e unit testing
- 18. Unit Testing EJB
- 19. Uso di Unit Test in Xcode 5
- 20. AngularJS unit testing con ReSharper
- 21. Test Driven Development, Unit Testing
- 22. ASP.NET MVC Unit Testing - Sessioni
- 23. Unit-testing and boost :: asio
- 24. C++ e Dependency Injection in unit testing
- 25. Cosa unit testing in PHP per iniziare
- 26. Problemi di implementazione del modello di progettazione di fabbrica
- 27. Unit Testing ViewResult in Asp.NET MVC
- 28. Stampa Jersey JSON in Unit Testing
- 29. Che cos'è un modello di progettazione in fabbrica in PHP?
- 30. C# Unit Testing (Nunit) il metodo principale di un'app console?