簡體   English   中英

單元測試 mockito 存儲庫返回 null

[英]Unit test mockito repository return null

我正在測試 dynamodb 存儲庫。 這是測試的方法

public Book getBook(final String bookId) {
    DynamoDbTable<Book> bookTable = getTable();
    Key key = Key.builder().partitionValue(bookId)
        .build();
    return bookTable.getItem(key);
  }

  private DynamoDbTable<Book> getTable() {
    return dynamoDbEnhancedClient.table("Book",
        TableSchema.fromBean(Book.class));
  }

這里是測試 class

@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class BookRepositoryTest {

  @Mock
  private DynamoDbEnhancedClient dynamoDbEnhancedClient;
  @Mock
  private DynamoDbTable<Book> dyamoDbTable;
  @Mock
  private Key key;

  @InjectMocks
  private BookRepository repository;

  private final String BOOK_ID = "123";
  private static MockedStatic<TableSchema> tableSchema;

  @BeforeAll
  public static void init() {
    tableSchema = mockStatic(TableSchema.class);
  }

  @AfterAll
  public static void close() {
    tableSchema.close();
  }

  @Test
  void testGetBook() {
    Book book = HelperMethod.createBook();
    tableSchema.when(() -> TableSchema.fromBean(Book.class))
        .thenReturn(BeanTableSchema.create(Book.class));
    when(dynamoDbEnhancedClient.table("Book",
        TableSchema.fromBean(Book.class))).thenReturn(dyamoDbTable);
    when(dyamoDbTable.getItem(key)).thenReturn(book);
    final var result = repository.getBook(BOOK_ID);
    assertEquals(book, result);
  }

}

這是錯誤

org.opentest4j.AssertionFailedError: 預期:Book(bookId=123, keyCode=testKeyCode, eventTimestampMs=123, value=true) 實際:null

您從未嘲笑dyamoDbTable (似乎拼寫錯誤),所以它是null 另外,我不明白為什么需要模擬TableSchema.fromBean 好像你可以做

when(dynamoDbEnhancedClient.table(anyString(), any())).thenReturn(dyamoDbTable)

如果你這樣做了,你就不需要mockStatic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM