gpt4 book ai didi

Java:单元测试级联外部接口(interface)

转载 作者:行者123 更新时间:2023-12-04 20:43:01 26 4
gpt4 key购买 nike

考虑一个使用外部 jar 的类。该类处理 D 类型的对象,这些对象是通过对象 ABC 获得的,所有来自 jar 的外部对象。

class DProcessor() {  
public void process(PoolOfA pool) {
A a = pool.borrowObject()
...
B b = a.getB()
C c = b.getC()
for (D d : c.getAllDs()) {
// Do something meaningful with d
}
}
}

如何对 process(PoolOfA pool) 进行单元测试?

到目前为止,我最好的成绩是为所有外部类编写模拟:

PoolOfA pool = mock(PoolOfA.class);

A a = mock(A.class);
B b = mock(B.class);
C c = mock(C.class);

D d1 = mock(D.class);
D d2 = mock(D.class);
D d3 = mock(D.class);
D d4 = mock(D.class);

List listOfDs = new ArrayList<D>();
listOfDs.add(d1);
listOfDs.add(d2);
listOfDs.add(d3);
listOfDs.add(d4);

// Set specific behaviour for each d

when(pool.borrowObject()).thenReturn(a);
when(b.getC()).thenReturn(a);
when(c.getAllDs()).thenReturn(d);
when(b.getC()).thenReturn(c);
when(c.getAllDs()).thenReturn(listOfDs);

这看起来既麻烦又不优雅。有没有更好的办法?

最佳答案

当然,更好的方法是重写方法。但是,如果您由于某种原因不能这样做,mockito 提供了称为“深度 stub ”的强大功能。查看docs .

关于Java:单元测试级联外部接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900193/

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