一个用于单元测试和渗透测试代码的小型库。

1.0.0 2021-06-23 06:08 UTC

This package is auto-updated.

Last update: 2024-09-23 13:20:48 UTC


README

一个用于PHP的单元测试和渗透测试库。

安装

composer require devel0pmenthero/crash

使用

注意:任何参数都可以通过首字母大写来指定。

生成测试

单个类

Crash::Create(Subject::class, true, false);
php Crash.php -c[--create] --class="Subject"

目录

Crash::CreateFromPath("./targetdir", true, false);
php Crash.php -c[--create] -p[--path]="./targetdir"

可以通过传递可选的 "inherit"-参数包含继承的方法。

php Crash.php -c[--create] -p[--path]="" -i[--inherit]

可以通过传递可选的 "overwrite"-参数覆盖现有的测试类。

php Crash.php -c[--create] -p[--path]="" -o[--overwrite]

运行测试

Crash::Test("./targetdir");
php Crash.php -t[--test] -p[--path]="./targetdir"

省略路径将默认使用存储在公共 Crash::Tests 常量中的路径。

属性

Crash 允许用户通过定义自定义属性来控制特定测试的执行。在从现有源生成 Crash\Tests 时,库会将任何现有的 (Crash-) 属性复制到最终的测试类中。

重复

#[Repeat(Amount: int, Interval: int)]

"重复" 属性允许在可选的微秒间隔内多次执行测试用例。

Crash

#[Crash(Amount: int, Interval: int)]

"Crash" 属性与前者类似,但会传递随机数量的随机值到所需的测试用例中。

#[Values(Random: int, Interval: int, ...$Values)]

"值" 属性允许指定传递给所需测试用例的自定义值。或者,属性可以生成指定数量的随机值。

跳过

#[Skip]

"跳过" 属性简单指示库跳过测试或用例。

编写测试

测试是简单的PHP类,必须位于 "Crash\Tests"-命名空间中才能被识别为测试。

<?php
declare(strict_types=1);

namespace Crash\Tests;

use Crash\Test\Skip;
use Crash\Test\Method;
use Crash\Test\Method\Repeat;
use Crash\Test\Method\Values;
use Crash\Test\Method\Crash;

#[Skip]
class MyTest extends \Crash\Test {

    private int $Repetitions = 0;

    #[Repeat(5)]
    public function Repeat() {
        $this->Repetitions++;
    }

    public function RepeatedEnough(): void{
        \assert($this->Repetitions === 5);
    }
    
    #[Method\Skip]
    public function FailsAnyway(): void {
        \assert(false);
    }
    
    #[Values("a", 12, true)]
    public function Values($A, $B, $C): void {
        \assert($A === "a");
        \assert($B === 12);
        \assert($C === true);
    }    
    
    #[Values(Random: 8)]
    public function RandomValues(...$Values): void {
        \assert(\count($Values) === 8);
    }    
    
    #[Crash(Amount: 1000000, Interval: 20)]
    public function Crash(...$Values): void {
        ClassToTest::Method(...$Values);
    }

}