[TDD] Aantal asserts per unittest

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer / Innovatieve software / Virtual Re

Functieomschrijving Als .Net developer werken aan innovatieve software waar onder andere gebruik gemaakt wordt van Virtual Reality? Bijdragen aan een organisatie waar je uitgedaagd wordt om continu verbeteringen en ontwikkelpunten te ontdekken en door te voeren? Werken in de omgeving Putten? Reageer dan nu voor meer informatie! Het pro-actief aandragen van verbeteringen voor de bestaande applicatie; Ontwikkelen van nieuwe functionaliteiten; Doorvoeren van aanpassingen en wijzigingen; Verantwoordelijk voor koppelingen met andere systemen; Op de hoogte blijven van technische ontwikkelingen. Functie-eisen Hbo werk- en denkniveau; Een afgeronde IT gerelateerde opleiding; Minimaal 1 jaar professionele ervaring als developer; Aantoonbare kennis van C#; Initiatiefrijke

Bekijk vacature »

Ward van der Put
Moderator

Ward van der Put

21/09/2016 10:18:50
Quote Anchor link
Volgens sommigen kun je een unittest het beste beperken tot één assertion. Volgens anderen kun je in veel situaties beter meerdere assertions in één unittest verpakken. Zie hiervoor bijvoorbeeld Is it OK to have multiple asserts in a single unit test? op Stack Exchange.

Nu heb ik een class die een public static function validate() moet bevatten. Ik kan deze vereiste testen met één unittest met drie asserts:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class InternationalArticleNumberTest extends PHPUnit_Framework_TestCase
{
    /**
     * @testdox Public static validate() method exists
     */

    public function testPublicStaticValidateMethodExists()
    {

        $class = new \ReflectionClass('\NewCo\Types\InternationalArticleNumber');
        $this->assertTrue($class->hasMethod('validate'));
        $method = new \ReflectionMethod('\NewCo\Types\InternationalArticleNumber', 'validate');
        $this->assertTrue($method->isPublic());
        $this->assertTrue($method->isStatic());
    }
}

?>

Ik kan hetzelfde echter ook testen met drie unittests met elk één assert:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class InternationalArticleNumberTest extends PHPUnit_Framework_TestCase
{
    /**
     * @testdox validate() method exists
     */

    public function testValidateMethodExists()
    {

        $class = new \ReflectionClass('\NewCo\Types\InternationalArticleNumber');
        $this->assertTrue($class->hasMethod('validate'));
    }


    /**
     * @testdox validate() method is public
     */

    public function testValidateMethodIsPublic()
    {

        $method = new \ReflectionMethod('\NewCo\Types\InternationalArticleNumber', 'validate');
        $this->assertTrue($method->isPublic());
    }


    /**
     * @testdox validate() method is static
     */

    public function testValidateMethodIsStatic()
    {

        $method = new \ReflectionMethod('\NewCo\Types\InternationalArticleNumber', 'validate');
        $this->assertTrue($method->isStatic());
    }
}

?>

Welke aanpak verdient de voorkeur? En wat zijn jullie andere gedachten hierover?
Gewijzigd op 24/09/2016 08:27:07 door Ward van der Put
 
PHP hulp

PHP hulp

15/11/2019 17:09:16
 
Jelmer -

Jelmer -

03/10/2016 12:24:44
Quote Anchor link
Het lijkt mij prima om deze assertions te combineren in één test, onder het motto dat ze samen de interface van je methode testen.

Zelf zou ik deze test niet eens schrijven denk ik. Ik zou unit tests vooral gebruiken om het gedrag van je class te testen. Wanneer een methode die je verwacht als public static aan te kunnen roepen dat dan niet is, dan volgt dat vanzelf wel uit die tests.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.