带黄瓜的正则表达式与给出错误的字符串不匹配,但是如果测试多次编写,则将与相同的字符串匹配

问题描述 投票:4回答:2

我正在用Java编写,并使用带有Eclipse的小黄瓜来搜索具有以下要求的类似IP的字符串

应接受以句点分隔的四位数序列 其中的数字顺序定义如下:任何一位数字,如果第一个字符非零,则任何两位数字字符,一个后跟零,一个或两个,后跟任意数字的一个]

通过在Stepdefs.java文件中编写适当的正则表达式,这就是我写的内容

@When("^test_ip_address ((?:(\\d)|(1[0-2]\\d)|([1-9]\\d))\\.){3}(?:(\\d)|([1-9]\\d)|(1[0-2]\\d))$")
public void test_ip_address(String arg1) throws Throwable {
    System.out.println("test_ip_address true for: " + arg1);
}

现在,当我在Test.feature文件中为此方法编写测试(用Gherkin语言)时,第一个测试总是失败,测试(应该全部通过)

When test_ip_address 1.2.3.4
When test_ip_address 123.34.76.109
When test_ip_address 123.34.76.109
When test_ip_address 105.22.33.44

这不是价值问题,就像当我重新排序那些测试时,即使我在通过的另一项测试中使用了完全相同的值,也总是只有第一个失败!这是我得到的错误

cucumber.runtime.CucumberException: Arity mismatch: Step Definition 'skeleton.Stepdefs.test_ip_address(String) in file:(file path..)' with pattern [^test_ip_address ((?:(\d)|(1[0-2]\d)|([1-9]\d))\.){3}(?:(\d)|([1-9]\d)|(1[0-2]\d))$] is declared with 1 parameters. However, the gherkin step has 7 arguments [3., 3, null, null, 4, null, null]

我已经搜索了错误,并且当测试中的参数数量与方法中的参数数量不同时会抛出该错误,即使我使用(?:)将字符串作为一个参数传递,我也不会知道那7个论点从何而来!也不是错误原因

java regex cucumber-java cucumber-junit
2个回答
3
投票
cucumber.runtime.CucumberException: Arity mismatch: Step Definition 'skeleton.Stepdefs.test_ip_address(String) in file:(file path..)' with pattern [^test_ip_address ((?:(\d)|(1[0-2]\d)|([1-9]\d))\.){3}(?:(\d)|([1-9]\d)|(1[0-2]\d))$] is declared with 1 parameters. However, the gherkin step has 7 arguments [3., 3, null, null, 4, null, null]

此错误是由于正则表达式具有7个组。捕获7个参数。和方法

public void test_ip_address(String arg1) throws Throwable

仅声明1个参数(arg1)。

仅捕获一个参数,请使用non capturing group以避免捕获不必要的组作为方法参数。

表达式应该看起来像这样:

@When("^test_ip_address ((?:(?:(?:\\d)|(?:1[0-2]\\d)|(?:[1-9]\\d))\\.){3}(?:(?:\\d)|(?:[1-9]\\d)|(?:1[0-2]\\d)))$")

0
投票

以下正则表达式应验证所有IPv4地址:

String zeroTo255 = "(\\d{1,2}|(0|1)\\" + "d{2}|2[0-4]\\d|25[0-5])"; 

String regex = zeroTo255 + "\\."  + zeroTo255 + "\\."  + zeroTo255 + "\\." + zeroTo255;

改为使用此regex变量。希望这回答了您的问题:)

© www.soinside.com 2019 - 2024. All rights reserved.