Rumah >Java >javaTutorial >Apakah Perbezaan Antara Anotasi @Mock dan @InjectMocks Mockito?

Apakah Perbezaan Antara Anotasi @Mock dan @InjectMocks Mockito?

Patricia Arquette
Patricia Arquetteasal
2024-11-25 02:20:18504semak imbas

What's the Difference Between Mockito's @Mock and @InjectMocks Annotations?

Memahami Perbezaan Antara @Mock dan @InjectMocks dalam Mockito

Mockito, rangka kerja mengejek yang popular untuk Java, menyediakan dua anotasi penting: @ Mock dan @InjectMocks. Walaupun kedua-duanya penting untuk ujian mengejek, ia mempunyai tujuan yang berbeza.

@Mock: Mencipta Olok-olok

@Mock digunakan untuk mencipta objek olok-olok. Ia mewakili pelaksanaan palsu atau simulasi bagi objek sebenar. Olok-olok membolehkan anda mengawal tingkah laku mereka dan menegaskan interaksi mereka dalam ujian anda. Contohnya:

@Mock
private SomeDependency someDependency;

Kod ini mencipta olok-olok antara muka SomeDependency. Anda kemudian boleh menggunakan tiruan ini dalam ujian anda.

@InjectMocks: Menyuntik Olok-olok

Sebaliknya, @InjectMocks memainkan peranan yang berbeza. Ia digunakan untuk mencipta contoh kelas dan menyuntik olok-olok yang dibuat dengan anotasi @Mock (atau @Spy) ke dalam contoh itu. Ini membolehkan anda menguji interaksi antara berbilang kelas dan kebergantungan mereka tanpa membuat kejadian sebenar. Contohnya:

@InjectMocks
private SomeManager someManager;

Dalam kes ini, someManager ialah contoh kelas SomeManager. Anotasi @InjectMocks memberitahu Mockito untuk menyuntik olok-olok someDependency ke dalam contoh someManager.

Nota Permulaan dan Penggunaan

Untuk menggunakan @InjectMocks, anda mesti memulakan olok-olok menggunakan @ RunWith(MockitoJUnitRunner.class) atau Mockito.initMocks(this) untuk JUnit 4 dan @ExtendWith(MockitoExtension.class) untuk JUnit 5. Selain itu, ingat bahawa @InjectMocks mesti digunakan sekali sahaja dalam kelas ujian dan ia harus diletakkan pada medan yang mewakili kelas yang sedang diuji .

Contoh Penggunaan

Contoh berikut menggambarkan cara menggunakan @Mock dan @InjectMocks:

@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // this will be injected into someManager
 
    // tests...
}

Dalam ujian ini, olok-olok someDependency akan disuntik secara automatik ke dalam contoh someManager, membolehkan anda menguji interaksi mereka dengan berkesan.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Anotasi @Mock dan @InjectMocks Mockito?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn