我有以下课程:
@Getter //lombok
@AllArgsConstructor //lombok
public class A {
private Set<B> bSet;
public void aMethod() {
for (B b: bSet) b.bMethod();
}
}
@AllArgsConstructor //lombok
public class B {
public void bMethod() {
//do something
}
}
我想写一个测试来检查bSet的每个元素是否都调用了bMethod(),而不关心bMethod()的实现。
这是我需要成功的JUnit测试用例:
@Test
public void givenAWithBSet_whenAMethodIsCalled_thenCallBMethodOnAllBs() {
//GIVEN a with bSet
Set<B> bSet = new HashSet<>();
bSet.add(new B());
bSet.add(new B());
A a = new A(bSet);
//WHEN aMethodIsCalled
a.aMethod();
//then call bMethod on all bs
bSet.forEach(b -> verify(b, times(1)).bMethod());
bSet.forEach(Mockito::verifyNoMoreInteractions);
}
我试着嘲笑它,但没有成功,需要你的帮助
1条答案
按热度按时间xxe27gdn1#
如果您只想验证
Set
中的每个B
都调用了它的bMethod
,您可以像这样设置您的测试:它将验证每个mock是否都调用了
bMethod
,使用相同的mock是很好的,但是当您使用Set
并且mock使用identity函数来实现相等时,您需要创建多个mock。