20 Mart 2019 Çarşamba

PowerMockito whenNew + withNoArguments + thenReturn Kullanımı - Unit Under Test İçinde Yaratılan Nesneyi Mocklar

Giriş
Metodumuzun içinde yaratılan bir nesne varsa, yaratılan nesneyi mock'lamak için kullanılır. Açıklaması şöyle.
whenever the no-arg constructor of that class is invoked, a mock instance should be returned rather than a real one
Örnek
Elimizde şöyle bir kod olsun. Metodun içinde yaratılan OtherObject nesnesini mock'lamak isteeyelim. Yani test içinde Foo sınıfının doWork() metodu yeni bir OtherObject nesnesi değil benim mockladığım nesneyi kullanılır.
class Foo {
 
  public String doWork(){
    OtherObject obj=new OtherObject();
    return obj.work();
  }
}
Şöyle yaparız.
@Test
public void testDoWork() throws Exception{

  Foo foo = new Foo();

  OtherObj obj = new OtherObj();
  obj.test="mocked Test"; //here you can add any other needed values to obj

  PowerMockito.whenNew(OtherObj.class).withNoArguments().thenReturn(obj);

  String result = foo.doWork();
  Assert.assertTrue(result.equalsIgnoreCase("mocked Test"));
}
Örnek
Foo nesnemizin getWriter() bir metodu çağrılınca mock nesne dönmek için sadece Mockito kullanıyorsak şöyle yaparız.
PrintWriter mockWriter = Mockito.mock(PrintWriter.class);
Foo mockA = Mockito.mock(Foo.class);
Mockito.when(mockA.getWriter()).thenReturn(mockWriter);
PowerMockito ile şöyle yaparız.
Foo mockObject = Mockito.mock(Foo.class);
PowerMockito.whenNew(Foo.class).withNoArguments().thenReturn(mockObject);

Hiç yorum yok:

Yorum Gönder