java 我在Mockito中使用doReturn,但我一直收到UnfinishedStubbingException错误,因为我没有thenReturn

yzuktlbb  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(288)

当在Mockito中使用doReturn时,它没有thenReturn,所以我很困惑为什么它一直抛出UnfinishedStubbingException Unfinished stubbing detected here: E.g. thenReturn() may be missing.。它为我所有的doReturn抛出这个错误。
我的代码:

public List<Users> getUsers(String userId) {
    List<Users> usersList = new ArrayList<>();
    Table table = dynamoDB.getTable("users");
    ItemCollection<QueryOutcome> items = table.getIndex("userIndex").query(QuerySpec);
    Iterator<Item> iterator = items.iterator();
    while (iterator.hasNext()) {
        list.add(Util.jsonToObject(iterator.next().toJSONPretty(), Users.class));
    }
    return usersList;
}

测试类别:

List<Users> mockList = mock(List.class);
    Table mockTable = mock(Table.class);
    Users details = new Users("", "", "");
    ItemCollection<QueryOutcome> mockCollection = mock(ItemCollection.class);
    IteratorSupport<Item, QueryOutcome> mockIterator = mock(IteratorSupport.class);
    doReturn(mockTable).when(dynamoDB.getTable("users"));
    doReturn(mockCollection).when(mockTable.getIndex("")).query(mock(QuerySpec.class));
    doReturn(mockIterator).when(mockCollection).iterator();
    doReturn(true).doReturn(false).when(mockIterator).hasNext();
    doReturn(true).when(mockList).add(details);
    assertNotNull(dynamoService.getUser("").get(0));
tv6aics1

tv6aics11#

错误是正确的mockito语法。所以这完全是关于你希望你的语句如何显示以及你的代码风格是关于什么的。doReturnthenReturn或多或少是相同的,但在访问mockito语句的不同方式中使用。

// Gramar styled: code can be read like a book. Might be longer
doReturn("mockedResult").when(myMock).theMocksCalledMethod();

// Technical style: short but you might need to think about it shortly. Not intuitive
when(myMock.theMocksCalledMethod()).thenReturn("mockedResult");

所以结论是:你混淆了风格,他们不是100%的行为相同的方式,所以你不能混淆。纠正你的syntak在其中一种方式,它会工作-即使在你嘲笑的方式很多:)

相关问题