使用Mockito测试返回的字符串是否具有一定的长度

Dan*_*iel 3 java string junit mocking mockito

有一个方法有几个返回String的参数.在许多情况下,该方法抛出异常.当它返回时,String的内容取决于插入计算机的某个USB加密狗的参数和配置.返回的String的长度完全取决于参数.

我想知道的是如何使用Mockito(我是新手)进行单元测试.当返回的String具有一定长度时,其中一个测试方法应该成功完成.

如果您需要更多信息,请告诉我.

Tom*_*icz 9

有这样的界面:

interface Foo {
    void method(String s);
}
Run Code Online (Sandbox Code Playgroud)

一个想法是使用正则表达式匹配:

final Foo mock = mock(Foo.class);
mock.method("abc");
verify(mock).method(matches(".{3}"));
Run Code Online (Sandbox Code Playgroud)

不幸的是,字符串长度没有内置的匹配器(应该有!),但是编写自定义的很容易:

private static String hasSize(final int size) {
    return argThat(new ArgumentMatcher<String>() {
        @Override
        public boolean matches(Object argument) {
            return argument.toString().length() == size;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

现在只需调用静态方法:

verify(mock).method(hasSize(4));
Run Code Online (Sandbox Code Playgroud)