Unit testen met Rhino Mocks
|
|
|
- Nele de Jong
- 10 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Testen Unit testen met Rhino Mocks TWEE HANDEN OP ÉÉN BUIK Sinds Kent Beck in 2000 zijn meesterwerk Extreme Programming Explained schreef, weet iedere ontwikkelaar dat gedegen testen van software noodzakelijk is. Diverse frameworks voor unit testing zijn sindsdien ontstaan. In dit artikel laten we zien dat één van die frameworks, mock testing, een krachtige aanvulling vormt op het traditionele unit testen. We will write tests before we code, minute by minute. Het meesterwerk van Kent Beck resulteerde in een aanzienlijke verbetering in kwaliteit van onze software, maar smaakte naar meer. Ook de steeds complexere softwarearchitecturen (SOA, SaaS, SOAP, REST) hebben er toe bijgedragen dat de noodzaak is ontstaan voor nog krachtiger testframeworks. Met behulp van een separate test-class kunnen we nu het gedrag van een class en zijn services testen. De test-class legt per scenario de input en verwachte output vast. Deze vorm noemen we ook wel black box -testen. Je bent niet zo zeer geïnteresseerd hoe het gebeurt, als het resultaat maar bij de input past. Er zijn twee redenen waarom een white box - aanpak relevant kan zijn. Ten eerste wil je het gedrag van een class expliciet controleren. Denk hierbij aan een multi-threaded-oplossing waarbij je heel nauwkeurig wilt vastleggen en controleren hoe het thread-management verloopt. Ten tweede heb je bij het testen niet altijd invloed op en beschikking over de resources die de software gebruikt. Denk hierbij aan externe (web)services, database-resources of files en folders. Unit-tests moeten autonoom worden opgezet, onafhankelijk van andere componenten en externe resources. Het maakt unit-tests herhaalbaar en zij kunnen in fracties van secondes runnen. Dit bereik je door alle objecten die geen direct onderdeel uitmaken van de component te mocken. In de volgende voorbeelden hebben we de praktische weg gekozen om aan te tonen dat uniten mock-testen uitstekend bij elkaar passen. Je zult zien dat het een welkome aanvulling biedt op de dagelijkse uitdaging om kwalitatief goede software te realiseren. Het voorbeeld In dit artikel maken we gebruik van een class Worker die het IWorker-interface implementeert. In verschillende stappen zullen we de testcode voor deze class steeds verder uitbreiden. public class Worker : IWorker public bool IsRunning... public void Start()... public void DoWork(IWorkItem workitem)... public void Stop()... Om deze class te testen hebben we ook een CODEVOORBEELD 1. WORKER CLASS class nodig die als argument aan de DoWorkmethod meegegeven kan worden, namelijk een class die het IWorkItem-interface implementeert. public interface IWorkItem void DoWork(object[] arguments); CODEVOORBEELD 2. IWORKITEM-INTERFACE Je kunt hiervoor geen bestaande class gebruiken, want die hebben meestal afhankelijkheden naar andere classes en die classes weer naar andere classes, et cetera. Als je niet oplet, zit je niet alleen de Worker-class te testen, maar ook al die andere classes. Daarom gebruiken we een dummy-class WorkItemDummyClass die het IWorkItem-interface implementeert. Dat deze class verder niets doet, is niet van belang, we willen immers alleen de Worker-class testen (zie codevoorbeeld 3). De implementatie van WorkItemDummy- Class gaat eenvoudig. Je moet op zijn minst een property als IsDoWorkCalled hebben om te kunnen controleren of de DoWorkmethod wel aangeroepen is. Dat kan echt een heleboel werk betekenen als je veel classes en veel methods wilt testen. public void TestDoWork() WorkItemDummyClass workitemdummy = new WorkItemDummyClass(); hardworker.dowork(workitemdummy); Assert.IsTrue(workItemDummy.IsDoWork- Called, DoWork() is not called ); CODEVOORBEELD 3. UNIT-TEST VOOR WORKER. Mock-framework Een mock-framework biedt hier uitkomst. Mock-objecten worden gebruikt om eigenschappen en gedrag van andere objecten te simuleren. Alle mock-frameworks kunnen op basis van een interface door middel van reflectie een proxy-object aanmaken, dat je vervolgens gebruikt om de class mee te testen. Hierdoor zijn mock-objecten uitermate geschikt voor unit-testen. Bovendien dwingt het gebruik van mock-objecten je om interfacebased te programmeren, wat de kwaliteit van je code verbetert. Grady Booch zegt in zijn boek Object Solutions:...all well structured object-oriented architectures have clearly-defined layers, with each layer providing some coherent set of services though a well-defined and controlled interface. Mock-frameworks komen inmiddels in alle soorten en maten voor (TypeMock, EasyMock, Moq), allemaal met hun eigenaardigheden en aantrekkelijke kanten. Wij zijn erg gecharmeerd.net magazine nummer
2 Adv
3 van Rhino Mocks. Een paar redenen: - een heel prettige syntax en daardoor eenvoudig te leren; - zeer uitgebreide API waardoor je alles wat je maar wilt kunt mocken; - al heel lang een stabiel product waar nog steeds nuttige uitbreidingen op komen. Na het verder lezen van dit artikel deel je onze voorkeur wellicht. Getting started Om het RhinoMocks framework te kunnen gebruiken in je testcode moet je het volgende doen: - Download the assembly van aspx - Neem in je testproject een reference op naar Rhino.Mocks.dll - Zet boven in je test de volgende using-statements: using Rhino.Mocks; using Rhino.Mocks.Exceptions; Voorbeeld met RhinoMocks In codevoorbeeld 4 doen we dezelfde tests als in codevoorbeeld 3, maar gebruiken we de MockRepository uit het framework om een IWorkItem-implementatie te verkrijgen. Deze implementatie hoef je dus niet zelf uit te programmeren, maar genereert het RhinoMocksframework run-time voor je. Hierdoor kun je je in de test focussen op de Worker-class en hoef je je niet bezig te houden met het IWorkIteminterface. Opbouw van mock-sessie Het mocken begint met het aanmaken van een MockRepository. Deze fungeert als een collectie van alle objecten die je in de test gaat mocken. De repository biedt verscheidene methodes om (op basis van een interface) mock-objecten te maken. Als eerste (de recording-fase) geef je aan welke aanroepen er in de rest van je test verwacht worden. Daarna gaat het echte testen beginnen (de playback-fase) en als laatste wordt geverifieerd of aan alle verwachtingen is voldaan. Record versus playback-state De aangemaakte mock-objecten staan standaard in de recording-state. Dit betekent dat elke aanroep die je doet op zo n object intern geregistreerd wordt. Anders gezegd: je definieert je verwachtingen (setting-expectations in mock-taal). Verderop in de code, bij het uitvoeren van de test, verwacht je dat alle aanroepen die je in de record-state hebt gedaan ook daadwerkelijk uitgevoerd gaan worden. Met het statement mockworkitem.dowork() uit codevoorbeeld 4 wordt de verwachting gezet dat ooit een keer de DoWork-methode wordt aangeroepen op het mockworkitem-object. De recording-fase wordt afgesloten met ReplayAll(). Vanaf dit moment staan de mock-objecten in playback-state. De mock-objecten gedragen zich alsof ze echte implementaties van je interface zijn. De class waar het in deze test om gaat (de Worker) heeft geen idee dat de objecten waarmee hij werkt niet de echte implementaties zijn. Aan het einde van de test volgt via Verify- All() een controle of er aan alle verwachtingen is voldaan. Blijft een verwachting onvervuld, dan genereert het systeem een exception en faalt de test. Strict en Dynamic mocks De MockRepository heeft twee verschillende manieren voor het creëren van mock-objecten: - CreateMock<Type>() - DynamicMock<Type>() Via CreateMock gecreëerde mock-objecten heten strict mocks. Alleen díe methodes die in de recording-fase zijn aangeroepen worden geaccepteerd. Bij het aanroepen van een method in de test die niet in de recording-fase is genoemd, volgt er een exception en faalt de test. In codevoorbeeld 5 is het statement mock- WorkItem.DoWork()niet opgenomen in de recording-fase, maar wordt het wel aangeroepen door hardworker.dowork(). Hierdoor faalt de test. In dit voorbeeld is deze omissie duidelijk zichtbaar, maar het zou ook kunnen zijn dat de DoWork-methode een andere methode op hetzelfde interface aanroept. Die aanroep moet je dan in je recording-fase ook hebben toegevoegd. Anders gezegd: je moet de verwachting hebben gezet dat deze methode wordt aangeroepen. Het gaat hier echt om white-box-testing omdat je precies moet weten hoe de class die je test in elkaar steekt. Via DynamicMock gecreëerde Mock-objecten zijn mocks met dynamisch gedrag. De in de recording-state opgenomen methodes moeten uiteraard in de test worden aangeroepen. Maar tijdens de playback-fase aangeroepen andere methodes worden ook geaccepteerd. In codevoorbeeld 6 ontbreekt het statement mockworkitem.dowork()in de recordingfase, maar wordt wel aangeroepen door hard- Worker.DoWork(). De call wordt geaccepteerd en de test is geslaagd. Gebruik van LastCall Zoals al uitgelegd, zet je je verwachtingen door het aanroepen van methodes op je gemockte public void TestDoWorkUsingMocks() mockworkitem.dowork(); CODEVOORBEELD 4. UNIT TEST REVISED objecten. Het Rhino Mock-framework biedt een aantal classes die het mogelijk maken je verwachtingen nog verder te specificeren. Eén van de meest gebruikte is de LastCall-class. Codevoorbeeld 7 geeft via LastCall.IgnoreArguments() aan dat je niet geïnteresseerd bent in de argumenten die aan DoWork() worden doorgegeven. Via Repeat.Times(10) geef je de verwachting aan dat de methode Do- Work() tienmaal aangeroepen gaat worden. Gebruik de Do In de methodes die voor het mock-object zijn gegenereerd, zit geen code. Dat is niet altijd wat je wilt, bijvoorbeeld omdat je logging wilt kunnen doen van de doorgegeven parameters. Wens je toch dat er code wordt uitgevoerd in public void TestStrictMock() CODEVOORBEELD 5. STRICT MOCK..NET magazine nummer
4 public void TestDynamicMock() DynamicMock<IWorkItem>(); CODEVOORBEELD 6. DYNAMIC MOCK Het prettige van de anonymous delegate is dat je geen aparte private methode hoeft te definieren en vanuit de code ook lokale variabelen kunt gebruiken Mock de database In vrijwel elke applicatie heb je wel een keer componenten die een database nodig hebben voor hun data. Je wilt het gebruik van de database wel testen, maar niet de overhead van de database erbij (die misschien af en toe voor onderhoud uit de lucht is). Je wilt weten of jouw component op de juiste manier met je datalayer omgaat, zonder allerlei connection-strings, logins, drivers, et cetera nodig te hebben. Een unit-test dient herhaalbaar te zijn. Dus voor je unit-test moet de gebruikte data iedere keer identiek zijn. In een test-database ondergaat de data vaak door alles en iedereen (waaronder andere tests) wijzigingen. Hierdoor public void TestTransfer() IDbConnection databaseconnection = mocks.dynamicmock<idbconnection>(); IDbCommand databasecommand = mocks. DynamicMock<IDbCommand>(); Expect.On(databaseConnection). Call(databaseConnection.CreateCommand()).Return(databaseCommand).Repeat. Times(5); Return(1000.0); Return(2000.0); Return(900.0); Return(2100.0); public void TestDoWorkWithArguments() LastCall.IgnoreArguments().Repeat. Times(10); for (int index = 0; index < 10; ++index) hardworker.dowork(mockworkitem, index); public void TestDoWorkWithDo() int numberofcallstodowork = 0; LastCall.IgnoreArguments().Repeat. Times(10).Do( new DoWorkDelegate( delegate (int[] arguments) Console. WriteLine( DoWork(0) is called, arguments[0]); ++numberofcallstodo- Work; ) ); Call(databaseCommand.ExecuteNonQuery()).Return(1).Repeat.Twice(); Bank bank = new Bank(databaseConnection); double balanceaccount1 = bank.getbalance(12345); double balanceaccount2 = bank.getbalance(67890); bank.transfer(12345, 67890, 100); Assert.AreEqual(bank.GetBalance(12345), balanceaccount1-100); Assert.AreEqual(bank.GetBalance(67890), balanceaccount ); COVERVOORBEELD 7. GEBRUIK VAN LASTCALL een methode, dan koppel je deze code aan je methode met LastCall.Do(). In Codevoorbeeld 8 wordt de code Console. WriteLine(), etc. bij ieder aanroep van DoWork()-methode uitgevoerd. Het argument van de Do()-method is van het type Delegate en bevat de uit te voeren code. Let er wel op dat de method-signature van het Delegate-type overeen moet komen met de aan te roepen methode. Als jouw methode een string verwacht, moet de signature van de gebruikte Delegate ook een string bevatten. Daarvoor heb je definitie nodig in codevoorbeeld 9. for (int index = 0; index < 10; ++index) hardworker.dowork(mockworkitem, index); Assert.AreEqual(numberOfCallsToDoWork, 10); CODEVOORBEELD 8. GEBRUIK VAN LASTCALL.DO() private delegate void DoWorkDelegate(params object[] arguments); CODEVOORBEELD 9. DELEGATE VOOR DO()-METHOD CODEVOORBEELD 10. GEMOCKTE DATABASE is de data eigenlijk een ratjetoe, wat het erg lastig maakt om een eenvoudige en herhaalbare unit-test te ontwikkelen. In Codevoorbeeld 10 zie je een Bank-class waarin we de methodes GetBalance() en Transfer() testen. De Bank-class maakt gebruik van de ADO.Net-interface IDbConnection. Door deze interface te mocken, worden we onafhankelijk van de echte data in de database. De Bank-class maakt naast IDbConnection gebruik van IDbCommand s. We moeten dan ook het IDbCommand mocken. Via Expect. Call() bepaal je welke data je wilt teruggeven. Je ziet dat ExecuteScalar() vier keer een waarde retourneert. Dit is omdat we in test GetBalance() viermaal aanroepen: twee keer vóór en twee keer na de Transfer(). Het gaat om een echte white-box-test: je moet hier weten hoe de Bank-class gebruikmaakt 42.NET magazine nummer
5 public void TestWorkerEvents() _logger.debug( TestServiceEvents: started ); LastCall.IgnoreArguments().Repeat.Times(2).Do( new DoWorkDelegate( delegate(int[] arguments) Console.WriteLine( DoWork(0) is called, arguments[0]); int index = (int)arguments[0]; if (index == 0) throw new Exception( Generate an exception in DoWork() ); ) ); if (index == 0) throw new Exception( Generate an exception in DoWork() ); CODEVOORBEELD 12. EXCEPTION GENEREREN [TestInitialize] public void TestInitialize() _mocks = new MockRepository(); [TestCleanup] public void TestCleanup() _ < IWorker eventworker = new Worker(); // Attach an inline handler to the different events event eventworker.started += delegate(object sender, WorkerStartedEventArgs eventargs) _logger.debug( MyService has started ); ; eventworker.stopped += delegate(object sender, WorkerStoppedEventArgs eventargs) _logger.debug( MyService has stopped ); ; eventworker.erroroccurred += delegate(object sender, ErrorEventArgs eventargs) _logger.error( MyService generated an exception, eventargs.exception); ; eventworker.start(); for (int index = 0; index < 2; ++index) eventworker.dowork(mockworkitem, index); eventworker.stop(); _logger.debug( TestServiceEvents: done ); CODEVOORBEELD 11. EVENT HANDLERS van IDbConnection en IDbCommand. Hierdoor kan je test wel veel mock-code bevatten, maar als voordeel geldt dat de test onafhankelijk, herhaalbaar en zeer snel is. private delegate void StartedEventHandlerD elegate(object sender, WorkerStartedEventArgs eventargs); private delegate void ErrorEventHandler Delegate(object sender, ErrorEventArgs eventargs); private delegate void StoppedEventHandlerD elegate(object sender, WorkerStoppedEventArgs eventargs); Test je event handlers Events zijn cruciaal voor het opzetten van looslycoupled programmatuur. Je wilt testen dat geen events verloren gaan, dat de juiste events optreden en het op een juiste manier afhandelen van events. Rhino Mocks biedt de mogelijkheid events af te vangen (en er je eigen mock-code aan te hangen) en om events te genereren. In codevoorbeeld 11 worden de Started -, Stopped - en Error -events opgevangen. Hier zijn ook weer Delegate- types voor gedefinieerd. Tevens testen we dat wanneer er een exception optreedt in de IWorkItem.DoWork(), de CODEVOORBEELD 13. GEBRUIK TESTINITIALIZE/TEST- CLEANUP Worker door kan lopen. De test is zo opgezet dat er alleen de eerste keer een Exception gegenereerd wordt (zie codevoorbeeld 12). Vergeet VerifyAll niet Het is ons in de praktijk vaak overkomen dat we het VerifyAll()-statement in een test vergaten. Hierdoor vindt geen controle plaats of er aan alle verwachtingen voldaan is. Om dit te voorkomen, en om het gebruik van mocks eenvoudiger te maken, is het beter om je Mock- Repository een member-variabele te maken en initialisatie en verificatie in respectievelijk de TestInitialize()- en TestCleanup() -methodes te zetten. De mock-repository is beschikbaar in iedere test en VerifyAll() wordt nu altijd aan het einde van ieder test aangeroepen. Hoe nu verder? In dit artikel hebben we verschillende aspecten van unit-test en mocks de revue laten passeren. Toch zijn we geenszins volledig geweest. Ga ermee aan de slag en voel eigenhandig wat Rhino Mocks voor je kan betekenen. De code is te downloaden van netmagazine. Referenties Rhino Mocks, ontwikkeld door Oren Eini, ayende.com/projects/rhino-mocks.aspx Kent Beck: Extreme programming explained, embrace change Grady Booch: Object Solutions Alex Harbers en Richard de Zwart zijn software engineer bij Luminis ( Heb je vragen of wil je contact opnemen met één van de auteurs stuur dan een naar [email protected] of richard. [email protected] magazine nummer
Unit testen met Rhino mocks Twee handen op één buik
Unit testen met Rhino mocks Twee handen op één buik Sinds Kent Beck in 2000 zijn meesterwerk 'Extreme Programming Explained' schreef, weet iedere ontwikkelaar dat gedegen testen van software noodzakelijk
Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
NHibernate als ORM oplossing
NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur
Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)
public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;
Beschouw bijvoorbeeld de twee onderstaande klassen, waarvan de attributen en eigenschappen geannoteerd zijn met bijkomende XML-annotaties: using System ; using System. Xml ; using System. Xml. S e r i
Zelftest Programmeren in Java
Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test
Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A
Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 1 februari 2019, 11.00 13.00 uur Voor de meerkeuzevragen hebben we verschillende versies. Dit zijn de juiste antwoorden per versie.
Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.
Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze
Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers
1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen
Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET
Visual Basic.NET M. den Besten 0.3 VB. NET Inhoud Voorwoord Deel 1 Visual Basic.NET 1.1 Inleiding...13 1.2 De programmeertaal Visual Basic.NET...14 1.3 Microsoft Visual Basic 2010 Express Edition...15
Unit testen van EJB's. Koert Zeilstra - iprofs
Unit testen van EJB's Koert Zeilstra - iprofs Inleiding We weten tegenwoordig allemaal dat we ons product moeten testen om de kwaliteit te verhogen en behouden Software-ontwikkelaars zijn over het algemeen
Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur
Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Programmeren in C# Samenvatting van C#
Programmeren in C# Samenvatting van C# Proceduraal Programmeren Functies (O: void + return, I: referentie of value) Arrays, Lijsten Lussen (for, while, do while) Condities, if-else, switch Variabelen,
Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur
Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, 11.00-13.00 uur 1. Een klasse is niet: (a) het type van een object (b) een groepje methoden (c) een groepje variabelen
Dieper in Visual Basic.Net
Visual Basic.NET Dieper in Visual Basic.Net 7.1 Inleiding Dit hoofdstuk is bedoeld om je wat handiger te maken in het programmeren in Visual Basic. Je leert geen nieuwe programmeervaardigheden, maar je
WCF claims-based authorization
WCF claims-based authorization In elk project waar ik tot nu toe aan heb meegewerkt is beveiliging altijd een belangrijk onderdeel gebleken. De vraag is vaak wat de meest geschikte manier van authenticeren
Programmeren in Java 3
26 september 2007 Deze les korte herhaling vorige les Unified Modelling Language notatie van een class afleiding pointers abstracte classes polymorphisme dubieuze(?) constructies interfaces Meer over class
Genetische algoritmen in Java met JGAP
Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale
Object Oriented Programming
Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming
In een klassendiagram worden klassen beschreven in termen
Sander Hoogendoorn is Partner bij Ordina Patterns voor het gebruik van referenties in bedrijfsklassen G O E D G E B R U I K VA N R E F E R E N T I E S In de dagen dat applicaties voornamelijk bestonden
Bescherming van (software) IP bij uitbesteding van productie
12.15 12.40 Bescherming van (software) IP bij uitbesteding van productie Gerard Fianen INDES-IDS BV The choice of professionals Wie zijn wij? Tools, software components and services for the development,
Een gelinkte lijst in C#
Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.
Maak een pivot uit een Generic.List
Maak een pivot uit een Generic.List Introductie in extensions, reflection en code generation Nivo: 400 Introductie In bepaalde gevallen komt het voor dat je een Generic.List van een specifieke class hebt,
Aquo Domeintabellen Services (Aquo DS) Handleiding Webservice
Aquo Domeintabellen Services (Aquo DS) Handleiding Webservice handleiding voor de programmeur Auteur: Informatiehuis Water Documentbeheer Wijzigingshistorie Datum Versie Auteur Wijziging Aat van den Heuvel
Programmeren (1) Examen NAAM:
Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft
Aan het eind van deze lesbrief wordt uitgelegd wat het nut van OOP is en vind je een aantal oefenopdrachten.
Doel van deze lesbrief Deze lesbrief is bedoeld om je op de hoogte te brengen van de basisbegrippen die gangbaar zijn bij object georiënteerd programmeren (OOP). In deze lesbrief kom je korte codefragmenten
Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is
Opdrachten herhalen public void tekenscherm (object o, PEA pea) { int x; x = 1; while ( x
Access voor beginners - hoofdstuk 25
Access voor beginners - hoofdstuk 25 Handleiding van Auteur: OctaFish Oktober 2014 Werken met Klassemodules Tot nu toe heb ik in de cursus Access veel gewerkt met formulieren, en met procedures en functies.
Vakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen [email protected] en [email protected]
Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.
HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een
Versturen van email vanuit een Delphi VCL toepassing
Versturen van email vanuit een Delphi VCL toepassing Voor Delphi bestaan uiteraard verschillende libraries om emails te versturen, maar in dit voorbeeld wordt een C# Dotnet library gebruikt en aangesproken
Datastructuren Werkcollege Intro
Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs
Tentamen Imperatief Programmeren
Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven
Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.
WAT IS EEN UNIT TEST? Een unit test is een test om de functionaliteit van stukken code te controleren. Een goede unit test waarborgt een consistente werking van een klein onderdeel (een unit ) van de broncode.
Kleine cursus PHP5. Auteur: Raymond Moesker
Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven
Opdracht 7a. Applicatiebouw 2014/2015
Applicatiebouw 2014/2015 Opdracht 7a Inhoud Applicatiebouw op dag 7 College In het college wordt oa. overerving behandeld, waarmee je uit een bestaande klasse een nieuwe andere klasse kan maken. Ook zijn
Dynamiek met VO-Script
Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software [email protected] Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries
4 ASP.NET MVC. 4.1 Controllers
4 ASP.NET MVC ASP.NET is het.net raamwerk voor het bouwen van webapplicaties. De MVC variant hiervan is speciaal ontworpen voor het bouwen van dergelijke applicaties volgens het Model-View-Controller paradigma.
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts
APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,
Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent
Het relaas van de beginnende programmeur Het hoe en waarom van de assistent 1. Help, mijn code doet niks... Mogelijke oplossingen: Heb je op run geduwd (groene pijltje)? Zolang je niet op 'run' duwt, kent
HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren
HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet
Implementatie AssurePay ASP.NET. ideal
Implementatie AssurePay ASP.NET ideal Implementatie AssurePay ASP.NET 2 van 11 Inhoudsopgave Microsoft ASP.NET... 3 Classic ASP... 9 Implementatie AssurePay ASP.NET 3 van 11 Microsoft ASP.NET Implementeren
Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14
Python Vraag 1: Expressies en types Integrated Development Environment (IDE): Ø Wing 101 (gratis te downloaden op www.wingware.com) Oefeningen in de shell >> noemen we de prompt Python commando s = expressies
Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:
Eenvoudig voorbeeld. Er wordt verondersteld dat er met VS 2008 EXPRESS gewerkt wordt. Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: (Sommige schermafdrukken zijn afkomstig
Programmeren in C# Interfaces. Hoofdstuk 23
Programmeren in C# Interfaces Hoofdstuk 23 Programmeren in C# 2 Gradaties overerving Klassieke overerving Iets functioneels uitbreiden Code duplicatie Niet teveel aanpassingen aan bestaande code Objecten
IMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
Programmeren in Java 3
7 maart 2010 Deze les Zelf componenten maken Concurrency (multithreading): werken met threads levenscyclus van een thread starten tijdelijk onderbreken wachten stoppen Zelf componenten maken Je eigen component:
Organiseer uw verschillende SOAP services in één scenario
1 Organiseer uw verschillende SOAP services in één scenario Wouter Luijten [email protected] 2 Introductie Tijdens de implementatie van een proces heeft u vaak te maken met een veelvoud aan services.
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur
Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, 8.30 10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
SYNTRA-WEST. Initiatiecursus JAVA. Deel
SYNTRA-WEST Initiatiecursus JAVA Deel Syntra-West Syntra-West (vroeger Vormingsinstituut West-Vlaanderen) Doorniksesteenweg 220 8500 Kortrijk Tel. 056/26.02.00 Fax 056/22.81.07 i Inhoudsopgave SYNTRA-WEST...
Programmeren in C# Klassen schrijven
Programmeren in C# Klassen schrijven In dit hoofdstuk Klassestructuur Private variabelen Publieke methoden (public) Properties Constructormethodes Private methodes (private) Static methodes en properties
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in
Programmeren in Java les 3
4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een
Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.
Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
File Uploads met standaard ASP.NET
File Uploads met standaard ASP.NET In deze tutorial gaan we een aspx pagina maken (met codebehind), waarmee je een bestand kan uploaden naar de webserver. Noot: de hier beschreven code gaat niet in op
vbg.vbnet.beginner Foutafhandeling binnen Visual Basic.NET
Fouten in software zijn onwenselijk, maar bijna niet te voorkomen. Er zijna namelijk zaken waar uw software geen invloed op uit kan oefenen. Het verbreken van een netwerkverbinding is een voorbeeld hiervan.
Modulewijzer Tirdat01
Modulewijzer Tirdat01 W. Oele 25 augustus 2008 1 Inhoudsopgave 1 Inleiding en leerdoelen 3 2 Voorkennis 3 2.1 tirprg01 en tirprg02........................ 3 2.2 tirprg03.............................. 4
HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10
CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel
Design patterns Startbijeenkomst
Design patterns Startbijeenkomst Harrie Passier Docenten Sylvia Stuurman (1 e examinator) [email protected] Harrie Passier (2 e examinator) [email protected] Aarzel niet vragen te stellen! Rooster
Modulewijzer tirprog02/infprg01, programmeren in Java 2
Modulewijzer tirprog02/infprg01, programmeren in Java 2 W. Oele 17 november 2009 1 Inhoudsopgave 1 Inleiding 3 2 Studiehouding 3 3 Voorkennis 4 4 Inhoud van deze module 5 5 Leermiddelen 5 6 Theorie en
Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur
Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan
Sparse columns in SQL server 2008
Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : [email protected] www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG
INFITT01 - Internettechnologie WEEK 8
INFITT01 - Internettechnologie WEEK 8 Programma Databases (JDBC, JNDI, ORM, JPA) MVC & Spring/Struts EJB Databases Veel web applicaties moeten informatie over langere tijd op kunnen slaan. Een voor de
OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer;
OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Object georiënteerde (OO) systemen kennen vele voordelen ten opzichte van traditionele procedurele systemen. Zo zouden OO systemen flexibeler en beter onderhoudbaar
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 18 december 2015 Overerving (inheritance) Constructors Overriding Inheritance demo Exceptions Zelf exceptions veroorzaken Overerving (inheritance) 2-dimensionaal
Voorbeeld: Simulatie van bewegende deeltjes
Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten Simulatie Samenhang van objecten sim geërfd van Form stap zelf gedeclareerd auto r1
Programmeren: Visual Basic
PETERSTUYVESANT COLLEGE INFORMATICA 2009-2010 Programmeren: Visual Basic Algemene Kennis: 01. Programmeren Programmeren is het schrijven van een computerprogramma, een concrete verzameling instructies
Correspondentie inzake overnemen of reproductie kunt u richten aan:
Vrijwel alle namen van software- en hardwareproducten die in deze cursus worden genoemd, zijn tegelijkertijd ook handelsmerken en dienen dienovereenkomstig te worden behandeld. Alle rechten voorbehouden.
Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!
Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige
Software Test Plan. PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015
Software Test Plan PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie 1 Versie
Fun met webparts in ASP.Net
Fun met webparts in ASP.Net Deel 2:User controls en Webparts door Bert Dingemans, e-mail : [email protected] www : http:// 1 Inhoudsopgave FUN MET WEBPARTS IN ASP.NET... 1 DEEL 2:USER CONTROLS EN WEBPARTS...
In BlueJ. Doe onderstaande met muis/menu s:
In BlueJ Doe onderstaande met muis/menu s: Download en unzip het bestand sklok-run.zip en open het in BlueJ Maak een Schaakklok-object Voer herstart() uit voor dit object Vraag de resterende tijd op voor
Mijn eerste ADO.NET applicatie
Hoofdstuk 2 Mijn eerste ADO.NET applicatie ADO staat voor ActiveX Database Objects. Dit is een verzameling klassen die onderdeel uitmaken van het.net framework, waarmee je verbinding kunt maken met een
NAAM: Programmeren 1 Examen 29/08/2012
Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je
Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/
Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun
NAAM: Programmeren 1 Examen 21/01/2011
Programmeren 1 21 januari 2011 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet
Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.
Hoofdstuk 2 Een ASP.NET applicatie met ADO.NET opzetten In dit hoofdstuk ga je een eenvoudige website opzetten, waarbij je een aantal gegevens uit een database ophaalt. Je moet je kennis van ADO.NET dus
Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur
Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde
Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur
Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een
