gpt4 book ai didi

java - Mockito - 验证集合中的对象是否调用方法

转载 作者:行者123 更新时间:2023-11-30 06:22:18 24 4
gpt4 key购买 nike

我在使用 Mockito 框架时遇到了困难:

我有一个特定类型的Set,我想验证其中是否有任何对象调用了特定方法。这是我的代码:

@Mock
private Set<MyType> myTypes = (Set<MyType>) mock(Set.class);

@Before
public void setUp() throws Exception{
TestObject testObject = spy(new TestObject());

for(int i = 0; i < 4; i++){
MyType mT = mock(MyType.class);
mT.setName("Name"+i);
myTypes.add(mT);
}

testObject.setMyTypesSet(myTypes);
}

@Test
public void myTypeSet_Test(){

//call method which calls "getName()" for each element in the set
testObject.myTypeSet();

//HERE IS MY STRUGGLE
verify(myType, times(3)).getName();
}

因此,myTypes 对象有一个名为 getName() 的方法。我想测试一下,在我测试的方法中,getName() 方法是否被调用了 3 次。我无法编写 verify(myTypes, times(3)).getName() 因为 Set 没有方法 getName()。我希望我说清楚了。

最佳答案

您不需要在这里模拟Set;拥有一个充满模拟的常规 Set 应该就足够了:

private Set<MyType> myTypes = new HashSet<>();

然后

for(MyType myType : myTypes) {
verify(myType, times(3)).getName();
}

假设您实际上为每个集合元素调用了getName() 3次。如果情况并非如此,并且您只需为每个调用一次,则将是 times(1)

关于java - Mockito - 验证集合中的对象是否调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870547/

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