Saya memiliki metode untuk menanyakan pengguna dari DB. Ini akan mengembalikan pengguna jika ID cocok dan tanggal dibuat dalam hari tertentu

public User findUserCreatedLastTwoDays (String id, Date dateAccepted)
    // select * from User u where u.id = id and u.dateCreated > dateAccepted
    return User;

Saya ingin menulis Tes Unit untuk metode sederhana ini menggunakan Mockito. Saya baru saja mulai belajar Mockito dan tidak yakin bagaimana saya bisa mengejek objek Pengguna untuk menguji 2 skenario berbeda, ketika dateCreated > dateAccepted (kembalikan Pengguna) dan kapan dateCreated < dateAccepted (kembalikan nol).

Apakah saya perlu menulis beberapa kondisi seperti ini?

User testUser = new User();
testUser.setDateCreated(new Date() - 3);

if (dateCreated > dateAccepted)
    when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(testUser);
else 
    when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(null);

Hanya mencari beberapa ide bagaimana saya bisa menerapkan ini.

0
user1417127 4 April 2021, 11:21

1 menjawab

Jawaban Terbaik

Saya pikir cara termudah adalah dengan menggunakan Jawaban:

when(findUserCreatedLastTwoDays(id, dateAccepted)).thenAnswer(new Answer<User> () {
    User answer(InvocationOnMock invocation) {
        return dateCreated > dateAccepted ? testUser : null;
    }
}

Ini memiliki keuntungan bahwa nilai saat ini pada saat digunakan dan bukan nilai saat tiruan dibuat. Jika ini tidak penting bagi Anda, Anda juga dapat menggunakan kode yang disarankan:

if (dateCreated > dateAccepted) {
    when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(testUser);
} else {
    when(findUserCreatedLastTwoDays(id, dateAccepted)).thenReturn(null);
}
1
flaxel 4 April 2021, 08:38