Ben de laatste tijd redelijk wat aan het lezen hoe ik m'n code kan verbeteren. Een van de dingen die nagenoeg overal naar voren komt is het maken van unit testen. Op zich een redelijk goede stap. Nu heb ik in VS een test project aangemaakt en het maken van testen hierin is behoorlijk eenvoudig.
Echter zit ik (momenteel) nog met 1 ding, namelijk dat een test kort moet zijn (<1ms) en dat lukt vaak niet als je transacties doet tussen verschillende tiers of layers (webservice, database, bestanden). In de boeken die ik lees wordt er beschreven dat er dan gebruik gemaakt kan worden van mock objecten (met behulp van Interfaces). Op zich snap ik, denk ik, hoe zoiets gedaan moet worden, maar hoe gebruik je die interfaces (en dus de mock objecten) dan.
Stel dat ik een dal.Get() wil doen
Ik kan dan een interface maken IDataLayer met een methode Get() maken. Ook snap ik hoe ik dan een mock object kan maken in m'n test project, iets van
Wat ik echter niet snap is hoe ik m'n MockDAL aan ga roepen? Het is natuurlijk niet de bedoeling dat ik in de code uitzonderingen ga schrijven om testen uit te kunnen voeren. Dan schiet je je doel voorbij.
In de auto zat ik zojuist te denken om een extra Constructor te maken in m'n klassen. Normaal heb ik een constructor zonder parameters en dan doe ik er nu een bij met een parameter van de interface, dus:
Momenteel is dit de enige 'schone' methode die ik heb kunnen verzinnen.
Las ook dat er mock frameworks beschikbaar zijn, maar daar heb ik nog niet naar gekeken. Kan dus zijn dat dit 'probleem' daarmee al wordt ondervangen, of dat ik iets heel triviaals over het hoofd zie.
Echter zit ik (momenteel) nog met 1 ding, namelijk dat een test kort moet zijn (<1ms) en dat lukt vaak niet als je transacties doet tussen verschillende tiers of layers (webservice, database, bestanden). In de boeken die ik lees wordt er beschreven dat er dan gebruik gemaakt kan worden van mock objecten (met behulp van Interfaces). Op zich snap ik, denk ik, hoe zoiets gedaan moet worden, maar hoe gebruik je die interfaces (en dus de mock objecten) dan.
Stel dat ik een dal.Get() wil doen
Ik kan dan een interface maken IDataLayer met een methode Get() maken. Ook snap ik hoe ik dan een mock object kan maken in m'n test project, iets van
C#:
1
2
3
4
5
| public class MockDAL : IDataLayer { public void Get() } |
Wat ik echter niet snap is hoe ik m'n MockDAL aan ga roepen? Het is natuurlijk niet de bedoeling dat ik in de code uitzonderingen ga schrijven om testen uit te kunnen voeren. Dan schiet je je doel voorbij.
In de auto zat ik zojuist te denken om een extra Constructor te maken in m'n klassen. Normaal heb ik een constructor zonder parameters en dan doe ik er nu een bij met een parameter van de interface, dus:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| public class BusinesLayer { private IDataLayer _dal; public BusinesLayer() { this._dal = new DataLayer(); } public BusinesLayer(IDataLayer dal) { this._dal = dal; } } |
Momenteel is dit de enige 'schone' methode die ik heb kunnen verzinnen.
Las ook dat er mock frameworks beschikbaar zijn, maar daar heb ik nog niet naar gekeken. Kan dus zijn dat dit 'probleem' daarmee al wordt ondervangen, of dat ik iets heel triviaals over het hoofd zie.
Battle.net - Jandev#2601 / XBOX: VriesDeJ