milanowicz / php-testing
Library for PHPUnit testing
Installs: 1 849
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:php-library
Requires
- php: ^8.0
Requires (Dev)
- infection/infection: ^0.26.19
- jangregor/phpstan-prophecy: ^2.1.1
- markrogoyski/math-php: ^v2.11.0
- phpspec/prophecy-phpunit: ^v2.3.0
- phpstan/phpstan: ^2.1.5
- phpunit/phpunit: ^9.6.22
- slevomat/coding-standard: ^8.15.0
README
Library for PHPUnit testing.
Usage
Install by Composer
> composer require --dev milanowicz/php-testing
Methods
Example for using abstract class in your ClassTest:
class UnitTest extends Milanowicz\Testing\TestCase { public function testMethod(): void { // All Traits in abstract Milanowicz\Testing\TestCase are extends! // See below for further details from Trait methods } }
OR import Trait(s) for use them:
class UnitTest extends What\Ever\TestCase { use Milanowicz\Testing\TestTrait; public function testMethod(): void { // Access to private or protected Method $this->accessMethod((object) Class, (string) Method); // Run test(s) in it and when an assertion failed would throw, see message and data for the reason $this->catchAssertionFailing((array) $data, function ($data) { $this->assertEquals('whatEver', $data['whatEver']); }, (string) $catchData = ExpectationFailedException::class); // Create class without constructor $this->createInstanceWithoutConstructor((string) Class); // Call a private or protected Method with argument(s) $this->invokeMethod((object) Class, (string) Method, (mixed) ArgumentsForMethod); // Set a value to private or protected property $this->setProperty((object) Class, (string) Property, (mixed) PropertyValue); // Get a value from a private or protected property back $this->getProperty((object) Class, (string) Property); // Execute test of number tries to check, if it runs multiply times successfully $this->testLoops((callable) Function, (int) NumberOfTries, (int) NumberOfErrors); // Execute test and when it's throw an exception, then try it again $this->tryTest((callable) Function, (int) NumberOfTries); } }
TestPerformanceTrait is to execute two functions and see which was faster of those:
class UnitTest extends What\Ever\TestCase { use Milanowicz\Testing\TestPerformanceTrait; public function testMethod(): void { // Example functions $cb1 = static function () { usleep(100); }; $cb2 = static function () { usleep(200); }; // Call both methods after each other and save run times from them $this->measureTime((callable) $cb1, (callable) $cb2, (int) $n = 20); // Check AVG and Student-Test $this->checkPerformance((bool) $function1 = true, (float) $pValue = 0.05); // $cb1 should be faster $this->checkMeanTime((bool) $function1 = true); // $cb2 should be slower and throw an Exception $this->checkMeanTime((bool) false); // Check if $cb1 is significant faster $this->checkStudentTest((float) $pValue = 0.05); // Get all time measures $this->getTimeMeasures(); // Get both in array with AVG, STD and Median $this->getTimeStats(); // Get result from Student-T test $this->getTimeSignificance(); // Clear all times and measures $this->clearTimes(); } }
Exception
Usage for AssertionFailedException to get data in Exception message:
$e = new AssertionFailedException( (string) $message = 'Testing', (array) $data = [1], (int) $code = 1, (null|Throwable) $previous = null, ); $e->toArray(); // => [1] $e->count(); // => 1 $e->toString(); // => Message and Data as String // and all Exception methods are available: $e->getMessage(); // => Message and Data as String $e->getCode(); // => 1 $e->getPrevious(); // => null OR a Throwable object
Development
Run all test suites
> composer tests
Run PHP Code Styling
> composer style
Run PHPStan to analyze code
> composer analyze
Run PHPUnit tests
> composer test
Run Mutation tests by Infection
> composer infection