我在tests\api\LoginCest.php
中进行了以下测试:
class LoginCest {
public function login( ApiTester $I ) {
$I->assertTrue( true );
}
}
这个测试在另一个类tests\api\UpdateUserCest.php
中:
class UpdateUserCest {
/**
* @depends LoginCest:login
*/
public function updateUser( ApiTester $I ) {
$I->assertTrue( true );
}
}
注意,在@depends
注解中,我使用了第一个测试签名LoginCest:login
,如Codectrice文档中所建议的:
@depends适用于Cest和Codecrect\Test\Unit格式。可以在不同的类之间设置依赖关系。要从另一个文件指定依赖测试,您应该提供测试签名。通常,测试签名与className:methodName格式匹配。但要获得确切的测试签名,只需使用--steps选项运行测试即可查看:
我已经验证了第一个测试的签名是LoginCest:login
。但是当我运行第二个测试时,它失败了,因为它说第一个测试被跳过。更准确地说,控制台说:
更新用户测试:更新用户签名:更新用户测试:更新用户测试:tests/api/updateUserCest.php:更新用户场景--
跳过:此测试取决于LoginCest:testLogin是否通过
然后:
有1个跳过的测试:- --------1)更新用户测试:更新用户测试tests/api/UpdateUserCest. php:updateUser此测试依赖于LoginCest:login才能通过
可以,但不完整、跳过或有风险的测试!测试:1、Assert:0,跳过:1.
我错过了什么?
2条答案
按热度按时间kognpnkq1#
@depends
表示,如果您所依赖的测试成功通过,则仅执行测试。因此,在示例中,如果希望在调用“updateUser”之前调用“login”,则应该使用注解
@before
。第二件事是,我猜这个行为只有在两个方法都在同一个测试类中时才有效,所以这应该是work:
现在你可以显式地运行你的更新用户测试,并且可以确定,登录方法在之前被调用了。
codecept.phar run test/api/UpdateUserCest.php:updateUser
nvbavucw2#
按照AdvancedUsage - Codeception 4 Documentation
要从另一个文件指定依赖测试,您应该提供测试签名。通常,测试签名与className:methodName格式匹配。但是要获取确切的测试签名,只需使用--steps选项运行测试即可查看它
通常测试签名为:
但请注意,签名还可以包含名称空间:
确保使用正确的测试签名。使用--steps选项运行测试,并从那里复制测试签名。
Codecrement确实根据依赖性对测试进行排序,这是一个很好的特性。