标签: matcher

自定义hamcrest匹配器在单元测试中

在Grails中使用自定义hamcrest匹配器时遇到问题.使用我的匹配器运行测试失败:

java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索后,似乎这是由加载的库的顺序引起的:JUnit和Hamcrest.我在BuildConfig.groovy中添加了以下依赖项:

dependencies {
  test 'org.hamcrest:hamcrest-all:1.3'
}
Run Code Online (Sandbox Code Playgroud)

根据我能够找到的指令,可以通过确保在JUnit之前加载hamcrest类来解决这个问题.我不知道如何在Grails中实现这一点,或者如何以任何其他方式解决这个问题.

使用Grails 2.2.1

grails junit hamcrest matcher classloader

2
推荐指数
1
解决办法
490
查看次数

用于匹配开始/结束标记的Java正则表达式会导致堆栈溢出

Java Pattern该类的标准实现使用递归来实现许多形式的正则表达式(例如,某些运算符,交替).

这种方法导致堆栈溢出问题,输入字符串超过(相对较小)长度,甚至可能不超过1,000个字符,具体取决于所涉及的正则表达式.

一个典型的例子是以下正则表达式,使用交替Data从周围的XML字符串中提取可能的多行元素(命名),该字符串已经提供:

<Data>(?<data>(?:.|\r|\n)+?)</Data>
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式用于Matcher.find()读取"数据"捕获组并按预期工作的方法,直到提供的输入字符串的长度超过1,200个字符左右,在这种情况下,它会导致堆栈溢出.

是否可以重写上述正则表达式以避免堆栈溢出问题?

java regex stack-overflow matcher pattern-matching

2
推荐指数
1
解决办法
431
查看次数

Specs2 - “不应该等于” - 如何检查不相等?

Specs2 中有很多关于如何检查相等性的示例,但没有关于如何检查不相等性的示例。

我尝试了(除其他外)以下方法,但它不起作用:

"type safe get should work" in {
  Get("/SimpleLine") ~> getRoute[SimpleLine] ~> check {
    responseAs[String] shouldEqual "my name is SimpleLine"
    responseAs[String] shouldNot equal to "my name is SimpleLine2"
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

如何检查 Specs2 中的不相等性?

谷歌没有提供帮助。

scala matcher specs2

2
推荐指数
1
解决办法
2077
查看次数

哈姆克雷斯特。将集合中的项目与 2 个特定的属性值匹配

我有一个带有 SpecialObject 集合的测试结果。SpecialObject 具有“name”和“surname”作为属性。我想测试该集合是否包含具有 2 个特定属性“name=myname”和“surname=lastname”的 specialObject。

这是我尝试过但没有成功的方法:

assertThat(result, Matchers.<SpecialObject>hasItem(
    allOf(
          hasProperty("name", equalTo("myname")),
          hasProperty("surname", equalTo("lastname"))
));
Run Code Online (Sandbox Code Playgroud)

java hamcrest matcher spring-boot

2
推荐指数
1
解决办法
1501
查看次数

Hamcrest isEqualIgnoringWhitespace 不忽略空格

因此,当我们需要将一些 HTML 解析为 XML 并验证 HTML 中的所有内容都在 XML 文件中时,我们使用 Unittests 中的 Hamcrest 进行验证。由于我们不能在 XML 文件中包含更多或更少的信息,因此我们有一个不使用contains而是使用 的匹配器很重要equalTo。问题是我们解析但必须提取某些元素,因为它们在外部管理的数据模型中是不允许的。我们发现这样做在某些情况下会增加额外的空格(与 Jsoup 有关系)。

因此,由于空间与实际内容无关,我们决定暂时忽略它们(因为这纯粹是 PoC),但我们确实希望验证我们的概念。为此,我想出了一个解决方案,它去除每个空格 ( String.replaceAll("\\s","")),同时去除换行符和制表符。然后将所有文本连接成一个 String 对象,这使得阅读非常糟糕,而且在调试时也不是一个很好的做法。所以我选择使用 Hamcrests IsEqualIgnoringWhitespace. 在测试时,我发现它根本没有像名字所暗示的那样做任何事情。在代码中没有删除空格、制表符或换行符,而是检查当前字符是否为空格,如果是,则之前的字符是否也包含空格。如果是这种情况,它将删除一个空格。因此,基本上它只会将空格标准化为在两个单词之间仅包含其中一个。

下面是stripSpace类中使用的方法的代码:

public String stripSpace(String toBeStripped) {
    final StringBuilder result = new StringBuilder();
    boolean lastWasSpace = true;
    for (int i = 0; i < toBeStripped.length(); i++) {
        char c = toBeStripped.charAt(i);
        if (isWhitespace(c)) {
            if (!lastWasSpace) {
                result.append(' ');
            }
            lastWasSpace = true;
        } else { …
Run Code Online (Sandbox Code Playgroud)

java whitespace unit-testing hamcrest matcher

2
推荐指数
1
解决办法
3523
查看次数

特定节点上的 AST 匹配器

我编写了一个 AST 匹配器来查找特定类型语句。在匹配的节点中,我计算了该节点的邻居兄弟节点。现在我需要在邻居节点上运行匹配器来验证它们是否满足我的条件。clang AST 匹配器将整个树节点一一匹配。我想针对特定节点运行匹配器,如果该节点符合我所需的条件,则返回 true。这可能吗?

matcher clang abstract-syntax-tree

2
推荐指数
1
解决办法
1195
查看次数

使用Pattern,Matcher,替换

我想删除句子的引号.

ex)萨克勒画廊推迟备受争议的"海难"节目 - >萨克勒画廊推迟备受争议的沉船展

我知道可以使用Patter - Matcher - 替换.但我不知道如何使用它.

static String getText(String content) {
  Pattern NOQMARK = Pattern.compile("A");
  Matcher m;
  m = SCRIPTS.matcher(content);   
  content = m.replaceAll("");

  return content
}

我应该把什么放在"A"中?

任何建议对我都有帮助.谢谢.

java design-patterns matcher

1
推荐指数
1
解决办法
240
查看次数

使用ArgumentMatcher时发生NullPointerException

我编写了以下使用的JUnit测试ArgumentMatchers

    MyClass classUnderTest = new MyClass();

    class AnyBooleanMatcher extends ArgumentMatcher<Boolean> {
        public boolean matches(Object argument) {
            return ((Boolean) argument).equals(Boolean.TRUE);
        }
    }

    class MyObjectMatcher extends ArgumentMatcher<MyObject> {
        public boolean matches(Object argument) {
            return ((MyObject) argument).getValue().equals("123");
        }
    }

    final Service mockService = mock(Service.class);

    when(mockService.search(Matchers.argThat(new MyObjectMatcher()),
            Matchers.argThat(new AnyBooleanMatcher())));

    classUnderTest.callMethod(mock(ActionEvent.class));

    verify(mockService).search(Matchers.argThat(new MyObjectMatcher()),
            Matchers.argThat(new AnyBooleanMatcher()));
Run Code Online (Sandbox Code Playgroud)

不幸的是,我NullPointerExceptionwhen声明中总是收到。

我什至知道为什么:argThat返回nullJavaDoc中指定的。但是,我不知道为什么示例中的建模方式完全相同时,我的测试为什么不起作用。

java junit mocking matcher mockito

1
推荐指数
1
解决办法
2829
查看次数

Java正则表达式

我有一个下面的代码和平:

     Pattern p = Pattern.compile("^\\d|^\\W|^\\s");
     Matcher m = p.matcher("stack overflow");
Run Code Online (Sandbox Code Playgroud)

有人可以解释上面的正则表达式吗?它能做什么 ?我必须使它与现有功能之间不允许空格.例如,它不应允许"堆栈溢出",因为它包含空格.

编辑

我尝试的模式下面对我来说很好.谢谢大家的建议:

[a-zA-Z0-9_$#]
Run Code Online (Sandbox Code Playgroud)

java regex matcher pattern-matching

1
推荐指数
1
解决办法
266
查看次数

为什么这段代码不能正常工作?

为什么这段代码:

String keyword = "pattern";
String text    = "sometextpatternsometext";
String patternStr = "^.*" + keyword + ".*$"; //
Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
    int start = matcher.start();
    int end = matcher.end();
    System.out.println("start = " + start + ", end = " + end);
}
Run Code Online (Sandbox Code Playgroud)

start = 0,end = 23

不能正常工作.

但是,这段代码:

String keyword = "pattern";
String text    = "sometext pattern sometext";
String patternStr = "\\b" + keyword + "\\b"; //
Pattern pattern = …
Run Code Online (Sandbox Code Playgroud)

java regex substring matcher pattern-matching

1
推荐指数
1
解决办法
120
查看次数