首页 > 解决方案 > 有没有办法使用 anyNonEmptyString 而不是 anyString

问题描述

我正在尝试使用多个参数来模拟 Java 方法。参数之一是字符串。在我的程序运行时,String 可以采用许多值,但它不能为 null 或空白(它必须至少包含一个非空白字符)。

在这里使用 anyString() 是不够的。模拟 MyClass.bar() 之类的方法(如下所示)的好方法是什么?

public class MyClass {
    public Foo bar(String str, int myInt) {
        assert(!str.isBlank());
        return new Foo(str, myInt);
    }
}

抱歉,该示例是人为设计的 - 仅用于说明目的。

标签: javamockito

解决方案


正则表达式是你的朋友。'\s' 字符测试空格,而 '\S' 命令测试非空格。Matcher 命令find将搜索所有字符并在任何匹配正则表达式时返回 true。您将需要 Java.util.regex 包中的模式和匹配器类。

Pattern p = Pattern.compile("\\S");
Matcher m = p.matcher(str);
m.find(); 
/*
Will return true if and only if the string str contains a non-whitespace character.
Otherwise, returns false.
*/

请注意,一个简单的替代方法是从字符串中删除所有空格,然后检查长度是否不为 0。str.replaceAll("\\s+","").length() == 0如果字符串只是空格,则返回 true。正则表达式中的加号是可选的,没有它会运行得更快一些,除非字符串包含很多空白字符。


推荐阅读