【问题标题】:How to inject lambda method in constructor?如何在构造函数中注入 lambda 方法?
【发布时间】: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


【解决方案1】:

正确的答案是我应该在我的@Before 中模拟AB

private A a;
private B b;


@Before
public void setUp() throws Exception {
  a = new A(mock.Service.class); // cause it have an argument
  b = new B(mock.Service.class); // cause it have an argument
  list.add(a);
  list.add(b);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多