我知道 phpunit 在测试期间提供内存使用和执行时间,但是有没有办法在断言语句中使用这些数据?
例如,假设我想断言消耗的使用量是否大于或等于指定的内存或运行时间。我搜索网络以及 phpunit 手册,并不能得到准确的信息。
感谢您的任何提示。
我知道 phpunit 在测试期间提供内存使用和执行时间,但是有没有办法在断言语句中使用这些数据?
例如,假设我想断言消耗的使用量是否大于或等于指定的内存或运行时间。我搜索网络以及 phpunit 手册,并不能得到准确的信息。
感谢您的任何提示。
要在执行时间和已用内存上运行断言,您可以使用phpunit_stopwatch_annotations包。它提供了自己的 TestCase 类,为您的测试方法添加了对特殊注释( @executionTime和@memoryUsage )的支持。
如何使用phpunit_stopwatch_annotations:
从 StopwatchAnnotations\TestCase 扩展您的 TestCase 类
class ExampleTest extends \StopwatchAnnotations\TestCase
通过编写开始使用注释
@executionTime time_in_milliseconds
或者
@memoryUsage memory_in_bytes
在您的方法之前的 docblock 中。每次测试后将自动断言执行时间和内存使用情况。
也许我在想一个错误的方向,但为什么不尝试这样的事情呢?
class memTest extends PHPUnit_Framework_TestCase {
public function testMemory() {
$this->assertGreaterThanOrEqual(4194304, memory_get_usage());
}
}
只需使用您想要的假设说明符(此处:)assertGreaterThanOrEqual
并对照 . 检查您想要的值memory_get_usage()
。
在我的情况下,输出如下所示:
>phpunit unittests\memtest.php
PHPUnit 3.7.15
F
Time: 0 seconds, Memory: 1.75Mb
There was 1 failure:
1) memTest::testMemory
Failed asserting that 1503768 is equal to 4194304 or is greater than 4194304.
mypath\memtest.php:5
FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
如果有人对此感兴趣,我将 StopwatchAnotaions 重写为侦听器,以允许在此处集成有关内存使用和执行时间的断言:
https://github.com/jclaveau/phpunit-profile-asserts
public function test_usages()
{
...
$this->assertExecutionTimeBelow(100); // seconds
$this->assertMemoryUsageBelow('1M');
}
干杯