[英]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.