【发布时间】:2022-01-24 00:39:30
【问题描述】:
我一直在寻找这个问题的答案,但似乎找不到任何具体的答案。
假设我有一个具有多个方法的类,并且在该类中我有一个仅从 Javascript 请求调用的方法。该方法内部还有一些其他方法调用。但是,它没有返回值,也没有参数。我想针对该方法测试一些案例。这是一个例子:
public function myMethod(): void{
$dataArray = request()->data;
$service = $this->doMath();
$start = $service->getStart($paramA, $paramB);
// Couple computations here to get $someData
$end = $someData;
$this->final['start'] = $start;
$this->final['end'] = $end;
}
所以本质上,我想为myMethod() 编写一些测试,并为$paramA 和$paramB 赋予不同的值,并断言$this->final 具有正确/错误的输出。
如何解决这个问题?
【问题讨论】:
-
你不能只实例化类、运行方法和测试属性值吗?另见laravel.com/docs/8.x/http-tests
-
@miken32 我正在考虑这样做。所以我要实例化的是,在数组中有一些数据并测试这些值。不过,这将如何与 PHPUnit 一起工作(在文档中找不到任何内容)?或者我想一个更好的问题是,这实际上是一种正确的测试方式吗?我在一个代码库上入职,并且实际上并没有针对此类的任何单元测试,并且该方法只是在那里做一件事。很困惑,因为它是一段非常关键的代码,需要进行适当的测试。
-
只需使用标准断言来测试您想要的任何内容。该链接包含有关如何填充请求对象的详细信息,或者您可以使该方法接受可选参数,如果未提供它们则回退到请求。无论如何,在控制器上下文之外依赖请求对象并不是一个好习惯,因此将数据作为参数包含在内将使测试更容易并改进代码。
标签: php laravel unit-testing testing phpunit