20 Mart 2019 Çarşamba

Mockito @InjectMocks Anotasyonu - Class Under Teste Mock Nesneleri Inject İçin Kullanılır

Giriş
Açıklaması şöyle.
The easiest way of creating and using mocks is via the @Mock and @InjectMocks annotations. The first one will create a mock for the class used to define the field and the second one will try to inject said created mocks into the annotated mock.
Class under test'in mock nesnesi alabilmesi için constructor veya setter metodunun olması gerekir.

Bu anotasyonun çalışması için
- JUnit 4 kullanıyorsak Runner olarak MockitoJUnitRunner'ın kullanılması gerekir.
- JUnit 5 kullanıyorsak ExtendWith olarak MockitoExtension'ın kullanılması gerekir.

Eğer bu ikisini de kullanmıyorsak şu metodu @Before olarak işaretli metod içinde çağırmak gerekir.
MockitoAnnotations.initMocks(this);

Örnek
Elimizde şöyle bir kod olsun.
class Game {

  private Player player;

  public Game(Player player) {
    this.player = player;
  }

  public String attack() {
    return "Player attack with: " + player.getWeapon();
  }

}

class Player {

  private String weapon;

  public Player(String weapon) {
    this.weapon = weapon;
  }

  String getWeapon() {
    return weapon;
  }
}
Game nesnesine mock Player nesnesini geçmeki için şöyle yaparız.
@RunWith(MockitoJUnitRunner.class)
class GameTest {

  @Mock
  Player player;

  @InjectMocks
  Game game;

  @Test
  public void attackWithSwordTest() throws Exception {
    Mockito.when(player.getWeapon()).thenReturn("Sword");

    assertEquals("Player attack with: Sword", game.attack());
  }

}

Hiç yorum yok:

Yorum Gönder