PHPUnit: 04 Testing a User model

UserTest.php

<?php

use PHPUnit\Framework\TestCase;


class UserTest extends TestCase
{
    
    public function testThatWeCanGetTheFirstName(){
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        
        $this->assertEquals($user->getFirstName(),'Billy');
    }
    
    public function testTrueAssertsToTrue()
    {
        $this->assertTrue(true);
    }
    
}

 

Run

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

.E.                                                                 3 / 3 (100%)

Time: 48 ms, Memory: 4.00MB

There was 1 error:

1) UserTest::testThatWeCanGetTheFirstName
Error: Class 'App\Models\User' not found

W:\w\git\phpunitbasics\tests\unit\UserTest.php:10

ERRORS!
Tests: 3, Assertions: 2, Errors: 1.


Add app\Models\User.php

<?php
namespace App\Models;

class User
{
    
}

 

Run

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

.E.                                                                 3 / 3 (100%)

Time: 50 ms, Memory: 4.00MB

There was 1 error:

1) UserTest::testThatWeCanGetTheFirstName
Error: Call to undefined method App\Models\User::setFirstName()

W:\w\git\phpunitbasics\tests\unit\UserTest.php:12

ERRORS!
Tests: 3, Assertions: 2, Errors: 1.

 

 

 


Create setFirstName function

<?php
namespace App\Models;

class User
{
    public $first_name;
    
    public function setFirstName($name)
    {
        $this->first_name = $firstName;
        
    }
}

 

Run

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

.E.                                                                 3 / 3 (100%)

Time: 47 ms, Memory: 4.00MB

There was 1 error:

1) UserTest::testThatWeCanGetTheFirstName
Error: Call to undefined method App\Models\User::getFirstName()

W:\w\git\phpunitbasics\tests\unit\UserTest.php:14

ERRORS!
Tests: 3, Assertions: 2, Errors: 1.

 

 


Adding getUserName() with mock value

 

<?php
namespace App\Models;

class User
{
    public $first_name;
    
    public function setFirstName($firstName)
    {
        $this->first_name = $firstName;
        
    }
    
    public function getFirstName()
    {
        return 'Billy';
        
    }
}

 

Run & PASS

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

...                                                                 3 / 3 (100%)

Time: 48 ms, Memory: 4.00MB

OK (3 tests, 3 assertions)

 

 

 


 Refactor with actual logic

<?php
namespace App\Models;

class User
{
    public $first_name;
    
    public function setFirstName($firstName)
    {
        $this->first_name = $firstName;
        
    }
    
    public function getFirstName()
    {
        //return 'Billy';
        return $this->first_name;
        
    }
}

 

Run

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

...                                                                 3 / 3 (100%)

Time: 47 ms, Memory: 4.00MB

OK (3 tests, 3 assertions)

 

 


Add Last Name Methods & Tests

User.php

<?php
namespace App\Models;

class User
{
    public $first_name;
    public $last_name;
    
    public function setFirstName($firstName)
    {
        $this->first_name = $firstName;
        
    }
    
    public function getFirstName()
    {
        //return 'Billy';
        return $this->first_name;
        
    }
    
    
    
    public function setLastName($lastName)
    {
        $this->last_name = $lastName;
        
    }
    
    public function getLastName()
    {
        //return 'Billy';
        return $this->last_name;
        
    }
}

 

UserTest.php

use PHPUnit\Framework\TestCase;


class UserTest extends TestCase
{
    
    public function testThatWeCanGetTheFirstName(){
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        
        $this->assertEquals($user->getFirstName(),'Billy');
    }
    
    public function testTrueAssertsToTrue()
    {
        $this->assertTrue(true);
    }
    
    public function testThatWeCanGetTheLastName(){
        $user = new \App\Models\User;
        
        $user->setLastName('Garrett');
        
        $this->assertEquals($user->getLastName(),'Garrett');
    }
}

 

Run

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

....                                                                4 / 4 (100%)

Time: 46 ms, Memory: 4.00MB

OK (4 tests, 4 assertions)

w:\w\git\phpunitbasics (develop-init-setup -> origin)

 


Add Get Full Name method to User.php

<?php

use PHPUnit\Framework\TestCase;


class UserTest extends TestCase
{
    
    public function testThatWeCanGetTheFirstName(){
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        
        $this->assertEquals($user->getFirstName(),'Billy');
    }
    
    public function testTrueAssertsToTrue()
    {
        $this->assertTrue(true);
    }
    
    public function testThatWeCanGetTheLastName(){
        $user = new \App\Models\User;
        
        $user->setLastName('Garrett');
        
        $this->assertEquals($user->getLastName(),'Garrett');
    }
    
    
    public function testFullNameIsReturned()
    {
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        $user->setLastName('Garrett');
        
        $this->assertEquals($user->getFullName(), 'Billy Garrett');
    }
}

 

Run

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

.....                                                               5 / 5 (100%)

Time: 47 ms, Memory: 4.00MB

OK (5 tests, 5 assertions)

 

 

 

 


Adding SetEmail Methods & Tests

User.php

<?php
namespace App\Models;

class User
{
    public $first_name;
    public $last_name;
    public $email;
    
    public function setFirstName($firstName)
    {
        $this->first_name = trim($firstName);
    }
    
    public function getFirstName()
    {
        //return 'Billy';
        return $this->first_name;
    }
    
    public function setLastName($lastName)
    {
        $this->last_name = trim($lastName);
    }
    
    public function getLastName()
    {
        //return 'Billy';
        return $this->last_name;
    }
    
    public function getFullName()
    {
        return $this->first_name ." ". $this->last_name;
    }
    
    public function setEmail($email)
    {
        $this->email = 'billy@somewhere.com';
        return $email;
    }
    public function getEmail()
    {
        //$this->email = 'Billy@somewhere.com';
        return $this->email;
    }
    
    public function getEmailVariables()
    {
        return [
            'full_name' => $this->getFullName(),
            'email' => $this->getEmail()
        ];
    }
}

 

UserTest.php

<?php

use PHPUnit\Framework\TestCase;


class UserTest extends TestCase
{
    public function testThatWeCanGetTheFirstName(){
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        
        $this->assertEquals($user->getFirstName(),'Billy');
    }
    
    public function testTrueAssertsToTrue()
    {
        $this->assertTrue(true);
    }
    
    public function testThatWeCanGetTheLastName(){
        $user = new \App\Models\User;
        
        $user->setLastName('Garrett');
        
        $this->assertEquals($user->getLastName(),'Garrett');
    }
    
    
    public function testFullNameIsReturned()
    {
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        $user->setLastName('Garrett');
        
        TestCase::assertFalse(false,'this is false');
        
        $this->assertEquals($user->getFullName(), 'Billy Garrett');
    }
    
    public function testFirstAndLastNameAreTrimmed()
    {
        $user = new \App\Models\User;
        
        $user->setFirstName(' Billy    ');
        $user->setLastName('    Garrett');
        
        
        $this->assertEquals($user->getFirstName(),'Billy');
        $this->assertEquals($user->getLastName(),'Garrett');
        
        //$this->assertEquals($user->getFullName(), 'Billy Garrett');
    }
    
    
    public function testEmailAddressCanBeSet()
    {
        $user = new \App\Models\User;
        
        $user->setEmail('billy@somewhere.com');
        $this->assertEquals($user->getEmail(), 'billy@somewhere.com');
    }
    
    public function testEmailVariablesContaintCorrectValues()
    {
        $user = new \App\Models\User;
        
        $user->setFirstName('Billy');
        $user->setLastName('Garrett');
        $user->setEmail('billy@somewhere.com');

        $emailVariables = $user->getEmailVariables();
        
        $this->assertArrayHasKey('full_name', $emailVariables);
        $this->assertArrayHasKey('email', $emailVariables);
        
        $this->assertEquals($emailVariables['full_name'],'Billy Garrett');
        $this->assertEquals($emailVariables['email'],'billy@somewhere.com');
    }
}

 

Run

 

w:\w\git\phpunitbasics (develop-init-setup -> origin)
λ vendor\bin\phpunit
PHP Warning:  Declaration of TemplateMethodsTest::onNotSuccessfulTest(Exception $e) should be compatible with PHPUnit\Framework\TestCase::onNotSuccessfulTest(Throwable $t) in W:\w\git\phpunitbasics\tests\unit\TemplateMethodsTest.php on line 54

Warning: Declaration of TemplateMethodsTest::onNotSuccessfulTest(Exception $e) should be compatible with PHPUnit\Framework\TestCase::onNotSuccessfulTest(Throwable $t) in W:\w\git\phpunitbasics\tests\unit\TemplateMethodsTest.php on line 54
PHPUnit 7.4.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.9
Configuration: W:\w\git\phpunitbasics\phpunit.xml

.TemplateMethodsTest::setUpBeforeClass
TemplateMethodsTest::setUp
TemplateMethodsTest::assertPreConditions
TemplateMethodsTest::testOne
TemplateMethodsTest::assertPostConditions
TemplateMethodsTest::tearDown
.TemplateMethodsTest::setUp
TemplateMethodsTest::assertPreConditions
TemplateMethodsTest::testTwo
TemplateMethodsTest::assertPostConditions
TemplateMethodsTest::tearDown
.TemplateMethodsTest::tearDownAfterClass
.......                                                        10 / 10 (100%)

Time: 54 ms, Memory: 4.00MB

OK (10 tests, 15 assertions)

 

 


 

 

 

 

 

Tags