Using PHPUnit: Difference between revisions

From Littledamien Wiki
Jump to navigation Jump to search
(Created page with "== Errors and fixes == === mysqli no such file or directory === Run a unit test that makes a database connection and receive <syntaxhighlight lang="text"> mysqli::mysqli()...")
 
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Errors and fixes ==
[[Category:Unit Testing]] [[Category:PHP]] [[Category:Web Development]]
== Configuring unit tests in PHPStorm ==


=== mysqli no such file or directory ===
=== Composer ===


Run a unit test that makes a database connection and receive
Add PHPUnit to composer: <ref>[https://phpunit.de/getting-started/phpunit-8.html Getting Started With PHPUnit 8] - PHPUnit Documentation</ref>


<syntaxhighlight lang="text">
<syntaxhighlight lang="javascript">
mysqli::mysqli(): (HY000/2002): No such file or directory
  "require-dev": {
    "phpunit/phpunit": "^8"
  }
</syntaxhighlight>
</syntaxhighlight>


First Google results suggested making sure that the `mysql` extension was compiled into PHP. I don't think this was the actual issue.
Update installed composer dependencies:


I installed PHP using homebrew, according to [http://justinhileman.info/article/reinstalling-php-on-mac-os-x/ these instructions]. This version of PHP comes with MySQL compiled into it, but I think that PHP that comes installed on the Mac most likely does also.
<pre>
php composer.phar update
</pre>


The issue ended up being that the MySQL connection was configured to use `localhost` as the host name. `locahost` for the PHP CLI resolves to something very different than when running on the development web server. <ref>[https://webdevjourney.wordpress.com/2011/04/20/warning-mysql_connect-function-mysql-connect-no-such-file-or-directory/ <nowiki>Warning: mysql_connect() [function.mysql-connect]: No such file or directory</nowiki>] - Devster Journey blog</ref>
=== Creating unit tests ===
 
Test class names start with "Test" and test function names start with "test".  
 
Test classes extend `PHPUnit\Framework\TestCase`.
 
<syntaxhighlight lang="php">
<?php
namespace Littled\Tests\Account;
 
use Littled\Account\Address;
use PHPUnit\Framework\TestCase;
 
class AddressTest extends TestCase
{
    public function testInitialValues()
    {
        $addr = new Address();
        self::assertInstanceOf('Littled\Request\IntegerInput', $addr->id);
        self::assertEquals(100, $addr->address2->sizeLimit);
        /* etc... */
    }
}
</syntaxhighlight>
 
=== Running unit tests ===
 
Right click on a TestCase class or a directory containing TestCase classes and choose '''Run''' ( <kbd>&#8963;</kbd> <kbd>&#8679;</kbd> <kbd>R</kbd> )
 
=== Generating unit test classes ===
 
PHPStorm can be configured such that when a new class is created, a corresponding class can be added to unit tests.
 
* Mark the class directory as the root for the app code.
* Mark the directory containing the unit tests as a tests directory (right click > Mark Directory As > Test Sources Root)
* Create a new PHP class file.
* Right click on the file and create the unit test.


== Notes ==
== Notes ==

Latest revision as of 17:50, 6 September 2019

Configuring unit tests in PHPStorm[edit]

Composer[edit]

Add PHPUnit to composer: [1]

"require-dev": {
    "phpunit/phpunit": "^8"
  }

Update installed composer dependencies:

php composer.phar update

Creating unit tests[edit]

Test class names start with "Test" and test function names start with "test".

Test classes extend PHPUnit\Framework\TestCase.

<?php
namespace Littled\Tests\Account;

use Littled\Account\Address;
use PHPUnit\Framework\TestCase;

class AddressTest extends TestCase
{
    public function testInitialValues()
    {
        $addr = new Address();
        self::assertInstanceOf('Littled\Request\IntegerInput', $addr->id);
        self::assertEquals(100, $addr->address2->sizeLimit);
        /* etc... */
    }
}

Running unit tests[edit]

Right click on a TestCase class or a directory containing TestCase classes and choose Run ( R )

Generating unit test classes[edit]

PHPStorm can be configured such that when a new class is created, a corresponding class can be added to unit tests.

  • Mark the class directory as the root for the app code.
  • Mark the directory containing the unit tests as a tests directory (right click > Mark Directory As > Test Sources Root)
  • Create a new PHP class file.
  • Right click on the file and create the unit test.

Notes[edit]

See also[edit]

Footnotes[edit]

  1. Getting Started With PHPUnit 8 - PHPUnit Documentation