alexrili / lumen-test-booster
仅为 lumen 测试添加一些微小的增强
Requires
- codeception/aspect-mock: ^3.0
This package is auto-updated.
Last update: 2024-09-22 07:54:06 UTC
README
仅为使用 aspectmock 和 handler exception 对 lumen 测试进行的小抽象。
安装
# Install in dev mode
composer require alexrili/lumen-test-booster --dev
如何使用
首先,确保你已经在你的高级 test
文件夹内部创建了 Stubs
文件夹。将你的 clone classes
命名为 YourClassNameStub 并将它们放入 Stubs
文件夹中
tests\
Stubs\
ClassYouWantToCloneStub
在您的 TestCase 类中将 LumenTestBooster 作为 trait
导入。
use \LumenTestBooster;
// ... abstract class TestCase extends Base { use \LumenTestBooster; // ... }
如何克隆/模拟测试
只需覆盖 setUp
方法并调用 $this->stubClasses()
方法来模拟你的类
确保你在
test
高级文件夹中有一个Stubs
文件夹。
// ... public function setUp(): void { $this->stubClasses([ClassYourWantToMock::class]); parent::setUp(); } // ...
用例
第一个场景。 假设你有一个类名为 NotificationService,并且你想模拟这个类。首先,你需要在 tests/Stubs/
文件夹内创建一个 NotificationServiceStub。之后,你只需在 setUp
方法中调用 $this->stubClasses([ClassYourWantToMock::class]);
即可。就是这样。
别忘了在你的 TestCase 类中导入
LumenTestBooster
。
tests\
Stubs\
NotificationServiceStub.php
// ... public function setUp(): void { $this->stubClasses([NotificationService::class]); parent::setUp(); } // ...
第二个场景。 但是,如果你想测试一个方法的不同返回值呢?例如,你需要测试一个错误返回。
tests\
Stubs\
NotificationServiceStub.php
在 StubClass(在这个例子中是 NotificationServiceStub)内部,你将创建一个
sendEmailNotificationError()
方法。在这种情况下,你可以通过调用$this->withoutShowingExceptions()
来禁用异常处理器。
// ... /** @test */ public function should_return_erro_when_consumer_doesnt_have_an_email() { $this->doubleMethod(NotificationService::class, 'sendEmailNotification') ->setReturn(NotificationServiceStub::class, "sendEmailNotificationError"); } // ...
其他配置
你可以更改异常处理器,在运行时不显示/处理。比如说,你有一个特定的测试你想返回一个错误。
// ... /** @test */ public function should_return_error() { $this->withoutShowingExceptions(); // ... } // ...
你也可以更改默认的模拟路径集合。
这个配置必须放在你高级测试用例类内部。
// ... /** * setup before class function * * @return void */ public static function setUpBeforeClass(): void { self::initAspectMock( [ 'appDir' => '/', // root directory of your aplication. 'debug' => true, // to get debug details 'includePaths' => [__DIR__ . '/api/app', '/common'], // you can put how many folders you want to be maped here. 'cacheDir' => __DIR__ . '../storage/cache/__tests_ // place where you 'mocked/stub' class are runing. ]); parent::setUpBeforeClass(); } // ...
谢谢!
@GMBN (the goldenboy) @cadukiz