gpt4 book ai didi

map - JMock map 期望

转载 作者:行者123 更新时间:2023-12-04 05:45:48 29 4
gpt4 key购买 nike

我依赖于一个以 Map 作为参数的方法。

public interface Service {
void doSomething(Map<String, String> map);
}

我想写一个断言,用适当的 map 内容调用此依赖项。像这样的东西:
@RunWith(JMock.class)
public class MainTest {
private Mockery context = new Mockery();
private Service service = context.mock(Service.class);
private Main main = new Main(service);

@Test
public void test() {
context.checking(new Expectations(){{
oneOf(service).doSomething(with(hasEntry("test", "test")));
}});
main.run();
}
}

不幸的是,这无法编译,因为 hasEntry 在映射通用参数中有通配符:
public static <K, V> org.hamcrest.Matcher<java.util.Map<? extends K, ? extends V>> hasEntry(K key, V value);

有没有办法为 map 内容编写 JMock 期望?

最佳答案

由于我们遇到了 Java 泛型的限制,因此没有很好的答案。 jMock 所需的泛型与 assertThat() 所需的泛型之间存在紧张关系

我倾向于添加一个具有表现力名称的辅助方法来强制类型。

@Test public void test() {
context.checking(new Expectations(){{
oneOf(service).doSomething(with(mapIncluding("test", "test")));
}});

main.run();
}

@SuppressWarnings({"unchecked", "rawtypes"})
private Matcher<Map<String, String>> mapIncluding(String key, String value) {
return (Matcher)Matchers.hasEntry(key, value);
};

是的,这太丑了。我只能道歉,这是我们似乎能够做的最好的事情。也就是说,我很少需要关闭类型,我可以给它一个在域中有意义的名称,并且我已经将取消选中本地化为辅助方法。

关于map - JMock map 期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10704443/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com