如何在Cucumber特性文件的示例表格中将参数转换为整数?
如何在Cucumber特性文件的示例表格中将参数转换为整数?
我来帮你解决这个问题!你遇到的报错主要是因为几个细节没匹配到位,咱们一步步调整就能搞定:
1. 先对齐占位符和示例表格的列名
你现在的Scenario Outline里用的是<Status Code>(带空格),但Examples表格的列名是StatusCode(无空格),这俩得完全一致才行。要么把Feature里的占位符改成<StatusCode>,要么把表格列名改成Status Code,推荐用无空格的版本更规范:
Feature: My feature Scenario Outline: My scenario outline. Given foo When bar Then I get the status code "<StatusCode>". Examples: | StatusCode | | 200 |
2. 调整Step定义的正则,匹配带引号的整数
你的Feature步骤里是带引号的(比如最终会解析成"200"),但当前的Step定义@Then("I get the status code {int}.")没包含引号,所以Cucumber会把整个带引号的内容当成字符串,自然找不到对应的Step定义。
只需要给Step定义的正则加上引号,让它完全匹配Feature里的步骤格式就行:
@Then("I get the status code \"{int}\".") public void verifyStatusCode(int statusCode) { // 这里写你的断言逻辑,比如验证状态码是否符合预期 }
这样Cucumber就能自动把引号里的数字解析成Integer类型,完美匹配你的Step定义啦!
3. 进阶:全局类型注册(复杂场景用)
如果你有更多自定义类型转换的需求,可以用TypeRegistryConfiguration来全局配置。创建一个实现类,告诉Cucumber怎么把字符串转成整数:
import io.cucumber.core.api.TypeRegistry; import io.cucumber.core.api.TypeRegistryConfigurer; import java.util.Locale; public class CucumberTypeConfig implements TypeRegistryConfigurer { @Override public Locale locale() { return Locale.ENGLISH; } @Override public void configureTypeRegistry(TypeRegistry typeRegistry) { // 注册整数类型转换器,匹配数字格式的字符串 typeRegistry.defineParameterType(new io.cucumber.core.api.ParameterType<>( "int", "\\d+", // 匹配一个或多个数字的正则 Integer.class, Integer::parseInt // 字符串转整数的逻辑 )); } }
只要这个类在你的测试类路径下,Cucumber就会自动识别并应用这个转换规则,之后不管是带引号还是不带引号的数字,都会被自动转成Integer。
总结一下:最快捷的解决方式就是先对齐占位符和列名,再调整Step定义的正则匹配带引号的格式,这样就能让Cucumber自动识别整数类型啦!
备注:内容来源于stack exchange,提问作者DrRelling
相关产品推荐
相关产品推荐

