php testing
1.0.0
用于 PHPUnit 测试的库。
由作曲家安装
> composer require --dev milanowicz/php-testing
在 ClassTest 中使用抽象类的示例:
class UnitTest extends Milanowicz Testing TestCase
{
public function testMethod (): void
{
// All Traits in abstract MilanowiczTestingTestCase are extends!
// See below for further details from Trait methods
}
}
或者导入 Trait 来使用它们:
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 是执行两个函数,看看哪个函数更快:
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 ();
}
}
使用 AssertionFailedException 获取异常消息中的数据:
$ 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
运行所有测试套件
> composer tests
运行 PHP 代码样式
> composer style
运行 PHPStan 来分析代码
> composer analyze
运行 PHPUnit 测试
> composer test
通过感染进行突变测试
> composer infection
GNU GPL 版本 3