为了账号安全,请及时绑定邮箱和手机立即绑定

hamcrest 匹配器不匹配的问题

hamcrest 匹配器不匹配的问题

杨__羊羊 2021-08-25 10:21:08
我在使用以下代码时遇到问题,我有点困惑public class EchoApp {    public static void main(String[] args) {        for (String string : args) {            System.out.println(string);        }    }}以下测试失败:import static org.hamcrest.CoreMatchers.equalTo;import static org.mockito.Mockito.*;import java.io.PrintStream;import org.junit.Test;public class AppTest {    @Test    public void test() {        Input input = new Input("Hello!", "World!");        Output output = new Output("Hello!", "World!");        PrintStream out = mock(PrintStream.class);        System.setOut(out);        EchoApp.main(input.wrap());        output.value.forEach(i -> {            verify(out).println(equalTo(i));        });    }}import java.util.Arrays;import java.util.List;class Input extends Immutable<List<String>> {    Input(final List<String> values) {        super(values);    }    Input(String... values) {        super(Arrays.asList(values));    }    String[] wrap() {        return value.toArray(new String[value.size()]);    }    @Override    public String toString() {        return "Input [value=" + value + "]";    }}import java.util.Arrays;import java.util.List;class Output extends Immutable<List<String>> {    Output(List<String> values) {        super(values);    }    Output(String... values) {        super(Arrays.asList(values));    }    @Override    public String toString() {        return "Output [value=" + value + "]";    }}class Immutable<T> {    final T value;    Immutable(T value) {        this.value = value;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((value == null) ? 0 : value.hashCode());        return result;    }参数不同!通缉:printStream.println("你好!"); -> 在 AppTest.lambda$0(AppTest.java:24) 实际调用有不同的参数: printStream.println("Hello!"); -> 在 EchoApp.main(EchoApp.java:7)
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我认为如果您使用 Mockito Matcher(不是 hamcrest 匹配器),它会起作用:org.mockito.Matchers#eq(T)。当涉及到这些匹配器时,自动完成功能很差,因为它们只返回一个值。org.mockito.Matchers 用于验证参数(参见 JavaDoc)。


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信