Deze proeftoets is deel van de DEA Course aan de Hogeschool Arnhem/Nijmegen. In deze proeftoets worden verschillende bestaande workshops gecombineerd tot 1 representatieve toets waar normaal 1.5 uur voor staat. Als je de workshops gemaakt hebt zou je zonder daar op terug te vallen deze oefentoets in de gestelde tijd moeten kunnen maken. Zo niet, dan kom je kennis of handelingssnelheid tekort. Maak deze oefentoets uiterlijk eind van onderwijsweek 3 zodat er voldoende tijd is om eventuele gaten in kennis of ervaring te dichten.
- Maak een nieuw Maven project aan met als groupId
oose.dea.voornaamachternaam, bijvoorbeeldoose.dea.arnouddejager. Zet de Java versie in dit project in depom.xmlop12en zorg dat hetJUnit 5.4.0gebruikt. - Plaats de classes
AdderExecutor,FizzBuzzExecutorenFizzBuzzRunnerin het nieuwe project in een packageoose.dea.voornaamachternaam, bijvoorbeeldoose.dea.rodymiddelkoop. - Schrijf unit-tests waarmee je 100% test coverage krijgt voor de
executemethode van FizzBuzzExecutor en voor deexecutemethode vanAdderExecutor. - De huidige methode is niet bestand tegen negatieve input. Pas de execute methode aan zodat deze een eigen unchecked exception van het type
NonPositiveFizzBuzzInputExceptiongooit als de input kleiner of gelijk is dan 0. - Schrijf een unit-test waarmee je de nieuwe exceptionele situatie kunt testen.
- Run de tests in Maven op de command-line en laat zien dat alle tests uit de stappen 1.3 en 1.5 slagen door een screenshot van de Maven-output te maken of de output in een bestandje te bewaren genaamd stap1.6.log.
- De class
FizzBuzzExecutorbevat verschillende bad smells. Vervang de magic numbers door constanten. - De
executemethoden vanAdderExecutorenFizzBuzzExecutorlijken sterk op elkaar en bevatten duplicate code. Refactor de code door een nieuwe gedeelde superklasse te introduceren die de duplicate code verwijdert. Test het succes van deze refactoring door de unit tests vanAdderExecutorenFizzBuzzExecutorte runnen, deze moeten dan groen zijn.
- Voeg de classes
Product,ProductCategoryenStreamstoe aan je project en zet ook de bestaande unit-test vanStreamsin je project. Om die unit-test te laten compileren heb je een extra dependency nodig, namelijk met groupIdorg.hamcrest, artifactIdhamcrest-libraryen versie2.1, voeg deze dependency toe. - Implementeer de 4 methoden van de
Streamsclass met behulp van de Streams API, zo dat de vier geleverde unit tests slagen.
- Voeg de class
ProductIncreaseraan je project toe. - Maak een nieuwe class
ThreadedProductIncreasermet een eigenmainmethode. Maak in deze main methode:-
1 instantie van
Productaan:Product tv = new Product("TV", 1200);
-
2 Threads die de prijs van dit product ophogen door de
ProductIncreasermulti-threaded te maken -
2 Threads die de prijs van dit product ophogen door gebruik van een lambda-expressie
-
Start de vier threads en bescherm de Product class zodat niet meerdere threads tegelijk de prijs kunnen ophogen.