[ADV] Online Java Academy 2016 - S02 E08 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • zeef
  • Registratie: Januari 2000
  • Laatst online: 07:17
Java is een van de populairste programmeertalen, die tegenwoordig veel gebruikt wordt voor de ontwikkeling van Android-apps, maar het lukt maar een handjevol enthousiastelingen om deze taal zelf onder de knie te krijgen. Vorig jaar leerde je bij de Online Java Academy, powered by Tweakers en Capgemini, hoe je een android app maakte, maar om echt de volgende stap te zetten heeft jouw app een "backend" nodig.

Maak een RESTful API en serverapplicatie in Java.
In deze reeks van 12 tutorials leer je hoe je data verzamelt en opslaat in een database, en hoe je deze data uiteindelijk in een mobile of web applicatie kan laten zien. We laten zien wat de cloud is en hoe je je server toegankelijk maakt voor alle apparaten op het internet. Om ervoor te zorgen dat je app interessant blijft, laten we de applicatie zelfstandig nieuwe data op internet ontdekken via verschillende integraties met bijvoorbeeld youtube.

Praktische info
Alle 12 afleveringen zijn per vandaag beschikbaar op deze pagina, zodat je in je eigen tempo de hele serie kunt bekijken. In iedere video geven we je makkelijke en moeilijke challenges voor extra verdieping en uitdaging. Bij iedere aflevering is een apart forumtopic beschikbaar waar vragen gesteld kunnen worden en/of kennis gedeeld.

Winactie
Ook dit keer hebben we weer een mooie winactie geregeld. Bekijk de video’s, geef de juiste antwoorden op een vijftal vragen en maak zo kans op een Java Track naar keuze, beschikbaar gesteld door Capgemini Academy. Bekijk hier de vragen, spelregels en voorwaarden.

Tutorial 8: Integratietests maken voor de API met JUnit

Nu we de REST routes in de applicatie hebben geschreven, gaan we hiervoor een aantal integratie tests schrijven. Met behulp van deze tests kunnen we eenvoudig controleren of alle functionaliteit die we gemaakt hebben nog steeds werkt na het uitbreiden / aanpassen van onze code.

Wat vind je van deze tutorial? Loop je ergens tegenaan of wil je meer weten? Laat het ons weten!

[ Voor 36% gewijzigd door zeef op 01-08-2016 11:21 ]


Acties:
  • 0 Henk 'm!

  • nappie87
  • Registratie: Juli 2011
  • Laatst online: 02-09 18:43
Bij de test van ProductListController zoek ik naar een betere oplossing die de filosofie volgt dat de test onafhankelijk van elkaar moeten zijn. Ik was opzoek naar de @depends tag van PHPUnit (zie PHPUnit test dependencies) om ervoor te zorgen dat de addProduct() test na de showAll() en na de insert() test draait.

De addProduct() test veranderd een ProductList. Dit maakt het resultaat voor showAll() onvoorspelbaar (als eerst addProduct() is uitgevoerd dan is de productList anders dan als addProduct() nog niet is uitgevoerd).

Ik kwam zelf tot twee oplossingen die ik beide niet mooi vind, dus was benieuwd naar een beter oplossing.

Oplossing 1:
in showAll() en show() geen controle uitvoeren op productList2 zodat die ook geen probleem kan geven als je hem later (of eerder) aanpast.

Oplossing 2:
combineren van insert() en addProduct() zodat beide op dezelfde productList worden uitgevoerd in een vaste volgorde.

Java: Oplossing2
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
    @Test
    public void insertAndAddProduct() throws Exception {
        insert();
        addProduct();
    }

    private void insert() throws Exception {
        Response insertResponse = given().parameters("name", stubProductList3.get("name")).post("/api/lists");
        Assert.assertEquals(200, insertResponse.getStatusCode());

        Response getResponse = get("/api/lists/{productListId}", 3);
        Assert.assertEquals(200, getResponse.getStatusCode());
        String json = getResponse.asString();

        HashMap<String, Object> product = from(json).get();

        for (String key : stubProductList3.keySet()) {
            Assert.assertTrue(product.containsKey(key));
            Assert.assertEquals(product.get(key), stubProductList3.get(key));
        }
    }

    private void addProduct() {
        HashMap<String, Object> stubProductListFilled = new HashMap();
        stubProductListFilled.putAll(stubProductList3);

        stubProductListFilled.put("products", new ArrayList<HashMap>() {{
            add(stubProduct2);
        }});

        Response insertResponse = given()
                .parameters("ListId", stubProductListFilled.get("id"),
                            "productId", stubProduct2.get("id"))
                .post("/api/lists/{listId}/products", stubProductListFilled.get("id"));
        Assert.assertEquals(200, insertResponse.getStatusCode());

        Response getResponse = get("/api/lists/{productListId}", stubProductListFilled.get("id"));
        Assert.assertEquals(200, getResponse.getStatusCode());
        String json = getResponse.asString();

        HashMap<String, Object> product = from(json).get();

        for (String key : stubProductListFilled.keySet()) {
            Assert.assertTrue(product.containsKey(key));
            Assert.assertEquals(product.get(key), stubProductListFilled.get(key));
        }
    }


Voor de volledige code van ProductListControllerTest.java