Mockito çatısında @Mock
ve @InjectMocks
arasındaki fark nedir?
@Mockbir mock oluşturur.
@InjectMockssınıfın bir örneğini oluşturur ve
@Mock(veya
@Spy`) ek açıklamaları ile oluşturulan mock'ları bu örneğe enjekte eder.
Bu mock'ları başlatmak ve enjekte etmek için @RunWith(MockitoJUnitRunner.class)
veya Mockito.initMocks(this)
kullanmanız gerektiğini unutmayın.
@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {
@InjectMocks
private SomeManager someManager;
@Mock
private SomeDependency someDependency; // this will be injected into someManager
//tests...
}
Mockito'nun temel aldığı bir "mocking framework", size Mock nesneleri oluşturma yeteneği veren bir çerçevedir (eski terimlerle bu nesneler, bağımlı işlevsellik için şant olarak çalıştıkları için şant olarak adlandırılabilir) Başka bir deyişle, kodunuzun bağımlı olduğu gerçek nesneyi taklit etmek için bir mock nesnesi kullanılır, mocking çerçevesi ile bir proxy nesnesi oluşturursunuz. Testlerinizde sahte nesneler kullanarak aslında normal birim testinden entegrasyon testine geçersiniz
Mockito, MIT Lisansı altında yayınlanan Java için açık kaynaklı bir test çerçevesidir, temiz ve basit API ile güzel testler yazmanıza izin veren bir "mocking framework". Java alanında birçok farklı mocking çerçevesi vardır, ancak temelde iki ana mock nesne çerçevesi türü vardır, proxy aracılığıyla uygulananlar ve sınıf yeniden eşleme yoluyla uygulananlar.
Spring gibi bağımlılık enjeksiyon çerçeveleri, herhangi bir kodu değiştirmeden proxy nesnelerinizi enjekte etmenize olanak tanır, mock nesnesi belirli bir yöntemin çağrılmasını bekler ve beklenen bir sonucu döndürür.
@InjectMocksek açıklaması, test nesnesi örneğini örneklemeye çalışır ve
@Mockveya
@Spy` ile açıklanan alanları test nesnesinin özel alanlarına enjekte eder.
MockitoAnnotations.initMocks(this)çağrısı, test nesnesini sıfırlar ve mock'ları yeniden başlatır, bu nedenle bunu
@Before/
@BeforeMethod` ek açıklamanızda bulundurmayı unutmayın.