Furkan Zumrut

Mockito ile Unit Test Yazımı

 

unit test

Selamlar, bugün sizlere unit test için kullanılan popüler kütüphanelerden biri olan Mockito‘dan bahsedeceğim. Mockito tamamen bir ihtiyaçtan doğmuş, bu ihtiyaç objelerimizi mocklamak. Obje mocklamak nedir diye sorarsanız. Şöyle bir örnekle açıklayabiliriz.

Mesela elimizde UserDao şeklinde üyelerimiz hakkında database’de çeşitli işlemler yaptığımız bir Dao sınıfımız var.

Aynı zamanda LoginService diye’de bir Servis sınıfı var. Ben LoginService’in testini yazmak istiyorum. LoginServiceTest diye bir sınıf oluşturdum. Fakat burada benim UserDao’ya bir bağlılığım olacak yani LoginService için bir test yazmak istediğimde UserDao’yu kullanacağım. Fakat ben hiç UserDao sınıfı karıştırmayıp UserDao sınıfını mocklayarak sadece LoginService için testler yazabilirim. Mocklamaya aynı zamanda davranışları belirlemede giriyor. Yani ben UserDao’nun ne yapacağını belirleyebilirim. İşte böyle güzel bir özelliği var obje mocklamanın. Aşağıda küçük bir örnek ile gösterelim daha iyi anlayacaksınız eminim 🙂

public class User {

    private Long userId;
    private String userName;
    private String userPassword;

    public User(String userName, String userPassword) {
        this.userName = userName;
        this.userPassword = userPassword;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }
}

 

public class UserDao {

    public User findUserByName(String userName){
        return null;
    }


}

 

public class LoginService {

    @Autowired
    private UserDao userDao;

    public boolean login(String userName, String userPassword) {
        User user = userDao.findUserByName(userName);
        if(user.getUserName().equals(userName) && user.getUserPassword().equals(userPassword) ) return true;
        return false;

    }
}

 

@RunWith(MockitoJUnitRunner.class)
public class LoginServiceTest {

    //Testimizde UserDao'yu mocklayarak onun davranışlarını biz belirleyeceğiz böylece servis sınıfımızı test ederken
    //Database ile işimiz olmayacak
    @Mock
    private UserDao userDao;

    //Mockladığımız objeleri login service sınıfına inject ediyoruz.
    @InjectMocks
    private LoginService loginService;

    @Test
    public void shouldTrueIfUserNameAndPasswordIsTrue(){
        String userName = "furkan";
        String userPassword = "1234";

        //Basit bir User sınıfı oluşturduk kullanıcı adı şifre belirledik.
        User user = new User(userName,userPassword);

        //Ve asıl nokta. Dao servisine diyoruz ki eğer sana findUserByName methoduyla ilgili bir talep gelirse
        //Benim oluşturduğum user'i döndür.
        when(userDao.findUserByName(userName)).thenReturn(user);

        //Burdada kullanıcı adı ve şifremizin doğru olduktan sonra döndürülen sonucun true olup olmadığını kontrol ediyoruz.
        assertTrue(loginService.login(userName,userPassword));


    }
}

 

 

More from my site

  • Generic Dao ile crud işlemlerini tekrarlamaktan kaçının!
  • JHipster ile AngularJS ve Spring projelerinizi hızlıca ayağa kaldırın!
  • Java Restful Web Servisi oluşturmak
  • Getting Started with Scalate: Simple Web Application with Spring MVC
  • Gource ile projelerinizin gelişme sürecini görselleştirin.
  • Keep your Test Environment more stable with Pre-Branch
Java

Recent Posts

  • How to run java jar in Elastic beanstalk with custom jvm parameters? (Procfile)
  • How to change timezone with ebextension in Elastic Beanstalk?
  • Save your money shutting down EC2 Instance with AWS Lambda!
  • Keep your Test Environment more stable with Pre-Branch
  • Getting Started with Scalate: Simple Web Application with Spring MVC

Medium

Pages

  • CV

Categories

  • Android
  • AWS
  • CXF
  • Devops
  • Genel
  • Java
  • Javascript
  • JAX-RS
  • JPA/Hibernate
  • JSF
  • Maven
  • Postgresql
  • Servlet
  • Spring
  • Tomcat

Archives

  • August 2017
  • June 2016
  • October 2015
  • June 2015
  • May 2015
  • April 2015
  • February 2015
  • December 2014
  • November 2014
  • October 2014
  • June 2014
  • May 2014
  • June 2011

Theme created by Mick de Graaf

age of civilization
tank stars