【发布时间】:2018-11-25 05:58:56
【问题描述】:
测试类
将列表流式传输到地图中,我从该列表的元素中获取属性
public class MyClass {
private final Map<String, IMyInterface> map;
public MyClass(final List<IMyInterface> list) {
this.map = list.stream().collect(Collectors.toMap(IMyInterface::getUniqueName, i -> i));
}
}
测试
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@InjectMock
private MyClass instance;
@Spy
private ArrayList<IMyInterface> list;
@Mock
private A a;
@Mock
private B b;
@Before void setUp() throws Exception {
list.add(a);
list.add(b);
}
}
或测试
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Spy
private ArrayList<IMyInterface> list;
@Mock
private A a;
@Mock
private B b;
private class MockedClass extends MyClass {
MockedClass(List<IMyInterface> list) {
super(list);
}
}
@Before void setUp() throws Exception {
list.add(a);
list.add(b);
}
}
如何在执行构造函数后获取注入 Map?我必须测试这个类并使用地图对象
编辑:
IMyInterface::getUniqueName()
是接口中的方法 对象 A 和 B 实现 IMyInterface
我想将注入列表收集到地图中 当我将元素添加到列表中时,我在测试的类中将其置于调试模式,但是当调试模式打开时
list.stream().collect(Collectors.toMap(IMyInterface::getUniqueName(), i -> i));
停下来
【问题讨论】:
-
您可以使用 reflection 以某种方式提取该地图
-
这是什么 -
IMyInterface::getUniqueName()? “lambda 方法”是什么意思? -
不清楚你在这里问什么。如果我理解正确,您的问题与您的示例代码绝对无关,实际上是“我如何阅读私有字段?”在这种情况下,您的答案已经存在于问题1196192。
-
抱歉,
IMyInterface::getUniqueName()中没有() -
真正的解决方案是:测试被测类的行为。避免进入内部状态。换句话说:您传入一个列表,并且您知道生成的地图应该是什么样子。现在在您的测试类上调用其他方法,并在依赖于地图内容的东西上 assert。换句话说:您打算测试一个实现细节。哪个,你不应该。
标签: java list dictionary lambda mockito