Giriş
Kendi sınıfım içinde dışarıdan verilmeyen ancak new'lenen nesneyi mocklamak için kullanılır. Unit Under Test yani kendi sınıfımı @PrepareForTest anotasyonu ile PowerMock'a test başında göstermek gerekir.
Örnek
Şöyle yaparız. Burada Unit Under Test içinde new'lenen mock nesneyi Mockito ile yaratıyoruz.
Örnek
Şöyle yaparız. Burada Unit Under Test içinde new'lenen mock nesneyi Mockito ile yaratıyoruz.
Elimizde şöyle bir kod olsun.
Kendi sınıfım içinde dışarıdan verilmeyen ancak new'lenen nesneyi mocklamak için kullanılır. Unit Under Test yani kendi sınıfımı @PrepareForTest anotasyonu ile PowerMock'a test başında göstermek gerekir.
Örnek
Şöyle yaparız. Burada Unit Under Test içinde new'lenen mock nesneyi Mockito ile yaratıyoruz.
ConcreteClass concreteObject = mock(ConcreteClass.class);
PowerMockito.whenNew(ConcreteClass.class)
.withAnyArguments().thenReturn(concreteObject);
Örnek
Elimizde şöyle bir kod olsun.
class ToBeTest{
public ToBeTest(){}
public boolean doWork(){
OtherObject obj=new OtherObject();
return obj.work();
}
}
Şöyle yaparız
@Test
public void testDoWork() throws Exception{
MyTest mytest = new MyTest();
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 = mytest.doWork();
Assert.assertTrue(result.equalsIgnoreCase("mocked Test"));
}
Şöyle yaparız. Burada Unit Under Test içinde new'lenen mock nesneyi Mockito ile yaratıyoruz.
@RunWith(PowerMockRunner.class)
@PrepareForTest(CustomerContactDaoImpl.class)//the class creating the new instance
public class CustomerContactDaoImplTest {
@Mock
JdbcTemplate jdbcTemplateMock; //YOUR MOCK TO BE INJECTED
@InjectMocks
CustomerContactDaoImpl customerContactDaoImpl;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void insertCustomerContactTest() throws Exception {
//Arrange
Contact contact = ...
SimpleJdbcCall mockedSimpleJdbcCall = Mockito.mock(SimpleJdbcCall.class);
PowerMockito.whenNew(SimpleJdbcCall.class).withArguments(jdbcTemplateMock)
thenReturn(mockedSimpleJdbcCall);
//Act
customerContactDaoImpl.insertCustomerContact(contact);
//Assert
...
}
}
ÖrnekElimizde şöyle bir kod olsun.
public class ClassIWantToTest {
private ClassIWantToMock anotherClass;
public ClassIWantToTest() {
//some stuff
anotherClass = new ClassIWantToMock(); //<-- call constructor to build the field
//some other stuff
}
}
Şöyle yaparız. Burada new'lenen mock nesneyi PowerMockito ile yaratıyoruz.@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassIWantToTest.class,ClassIWantToMock.class})
public class ClassIWantToTest_Test {
@Test
public void myFirstTest() {
ClassIWantToMock myMock = PowerMockito.mock(ClassIWantToMock.class);
PowerMockito.whenNew(ClassIWantToMock.class).withAnyArguments().thenReturn(myMock);
ClassIWantToTest test = new ClassIWantToTest(); //<-- not mocked
}
}
Hiç yorum yok:
Yorum Gönder