Codeception / Codeception/AspectMock

Test::double doesn't work properly for static methods in parent

Đang mở
#120 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
PHP
Star
784
Fork
132
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

I'm using Yii2, Codeception and AspectMock, when I'm trying to mock/double static method from parent class then original method is used instad of mocked one.

Below example:

class Yii extends \yii\BaseYii
class \yii\BaseYii has static method `error()`

```
public function testStaticMethodForParentIsMocked()
{
$appVerifier = AspectMock\Test::double(\yii\BaseYii::class, [
'error' => function () {
return 2;
}
]);

$test = \Yii::error('test'); // Original method were used
$this->assertEquals(2, $test); // this assert will fail - not correct
$appVerifier->verifyInvokedOnce('error'); // this will pass - correct
}
```

```
public function testStaticMethodForClassIsMocked()
{
$appVerifier = AspectMock\Test::double(\Yii::class, [
'error' => function () {
return 2;
}
]);

$test = \Yii::error('test'); // Mocked method were used
$this->assertEquals(2, $test); // this assert will pass - correct
$appVerifier->verifyInvokedOnce('error'); // this will pass - correct
}
```

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Bắt đầu với hai phương thức kiểm thử trong issue và tái hiện sự khác biệt giữa việc tạo test double cho \yii\BaseYii và \Yii. Theo dõi cách lời gọi tĩnh thông qua lớp cha được phân giải và so sánh với trường hợp lớp trực tiếp; được coi là hoàn tất khi \Yii::error('test') trả về giá trị mock trong khi việc xác minh lời gọi vẫn thành công.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
php
Lĩnh vực
testing
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.