Giter Club home page Giter Club logo

php-testing's Introduction

PHP Testing

Test Mutation testing codecov

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

License

GNU GPL Version 3

php-testing's People

Contributors

dependabot[bot] avatar milanowicz avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.