2. Nedir?
≒ Java programlama dili i巽in gelitirilmi bir test
framework
≒ Erich Gamma ve Kent Beck taraf脹ndan gelitirilmitir.
≒ Birden fazla IDE ve derlemearac脹 i巽in destei vard脹r.
(Eclipse, Netbeans, IntelliJ, maven, ant vb.)
族霞 Erich Gamma; Design Patterns kitab脹n脹 yazar脹, Junit, Eclipse JDT ve
Microsoft Visual Studio proje lideri
族霞 Kent Beck; Extreme Programmingnin yarat脹c脹s脹 ve Agile Manifestonun
yazarlar脹ndan biri
3. Neye Yarar?
≒ Test kod taban脹n脹n standart olmas脹
≒ Test ve test suiteleri oluturulmas脹
≒ Basit anlamda birim test yapabilmenizi salarken, belirli
framework entegrasyonlar脹 ile karma脹k testleri de
kolaylat脹r脹r.
≒ rnein junit.framework.TestCase ile unit test
yazabilirken,
≒ @Runwith(SpringJUnit4ClassRunner.class) kullanarak
Spring framework ile entegre 巽al脹t脹r脹lmas脹 salanabilir
4. Birim Test
≒ junit.framework.TestCase s脹n脹f脹n脹 kal脹tan bir s脹n脹f
i巽erisinde birim test yaz脹labilr.
≒ Birim testlerin koabilmesi i巽in test metodlar脹n脹n test
anahtar s旦zc端端 ile balamas脹 gereklidir.
≒ setUp() metodu ile test 旦ncesi ayarlar ve nesne
oluturma ilemleri yap脹labilir.
≒ tearDown() metodu ile setUp metodundaki ayarlar脹
s脹f脹rlayabilirsiniz.
≒ setUp her test metodu 旦ncesinde, tearDown ise
sonras脹nda birer kez 巽al脹t脹r脹l脹r.
5. zellikler
≒ Test metodlar脹 public olmal脹d脹r
≒ Metodlar void d旦nmelidir
≒ Herhangi bir parametre almamal脹d脹r
public void testHede()
≒ Her test metodu tek bir ak脹 veya birim testi yapmal脹d脹r
≒ Testlerdeki 巽脹kt脹lar assert* ifadeleri ile kontrol edilmeli ve
bu kontrol sonras脹 test ak脹脹 ilerletilmelidir.
≒ Eer hata olmas脹 durumu s旦z konusuysa fail()
kullan脹lmal脹 ve test baar脹s脹z sonu巽land脹r脹lmal脹d脹r
6. Assert
≒ assertEquals
≒ assertNotNull
≒ assertSame
≒ assertNotSame
≒ assertTrue
≒ assertFalse
≒ assertThat
v金 assertEquals .equals() ile kontrol ederken assertSame == ile kontrol
yapar.
7. package com.turkcell.singlehub.test.unit;
rnek
import org.apache.log4j.Logger;
import junit.framework.TestCase;
import com.turkcell.singlehub.util.MathUtils;
public class MathUtilsTest extends TestCase{
private Logger logger = Logger.getLogger(MathUtilsTest.class);
@Override
public void setUp(){
logger.debug("run setUp");
}
public void testCut(){
double d = MathUtils.cut(1.1234, MathUtils.SCALE_TWO);
String result = String.valueOf(d);
assertEquals(4, result.length());
}
public void testCut2(){
double d = MathUtils.cut(1.1234, MathUtils.SCALE_TWO);
String result = String.valueOf(d);
assertFalse(result.length() == 5);
}
public void tearDown(){
logger.debug("run tearDown");
}
8. Entegrasyon Testi
≒ Belirli bir ak脹脹n veya entegrasyon noktas脹na ait servisin test
edilmesidir.
≒ Junit, Spring, Hibernate vb. frameworkler ile birlikte
巽al脹abilmektedir.
≒ Spring contextini junit ile y端klenmesini salayabilir ve
herhangi bir uygulama sunucusuna y端kleme yapmadan
uygulamay脹 巽al脹t脹rabilirsiniz.
≒ Daha 巽ok annotasyon ile y旦netim tercih edilir.
≒ Method balang脹c脹nda @Test annotasyonu varsa test
otomatik olarak 巽al脹t脹r脹l脹r.
≒ Test 旦ncesinde herhangi bir ayar gerekiyorsa @Before,
sonras脹nda ise @After annotasyonu olan metodlar Junit
taraf脹ndan otomatik olarak 巽al脹t脹r脹l脹r.
9. rnek
≒ @RunWith kullan脹larak hangi Junit 巽al脹t脹r脹c脹 ile testin 巽al脹t脹r脹laca脹 belirtilir.
Burada Spring Framework端n端n Junit i巽in gelitirdii plugin kullan脹lmaktad脹r.
≒ @ContextConfiguration ile Spring Contextinin hangi xml dosyas脹ndan
y端klenecei g旦sterilmektedir.
≒ Test kodu i巽in farkl脹 context y端klenebilecei i巽in kod taban脹ndaki context de
kullan脹labilir. Ancak ger巽ek ortam kodunda sorun olumamas脹 i巽in farkl脹
konfigurasyon dosyas脹 tercih edilmelidir.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:context-Test.xml"})
public abstract class AbstractTest {
}
10. rnek
public class InvoiceServiceTest extends AbstractTest {
@Autowired
private InvoiceService invoiceService;
@Test
public void hasUnpaidInvoices() {
ServiceResult<Boolean> serviceResult = invoiceService
.hasUnpaidInvoice(user);
Assert.assertNotNull(serviceResult.getValue());
Assert.assertTrue(serviceResult.getValue());
}
}
11. Test Suite
≒ Test suite kullanarak istediiniz testlerin birlikte tek bir
s脹n脹f 端zerinden komas脹n脹 salayabilirsiniz.
≒ Bu durum belirli ak脹lar脹 tek bir ak脹ta 巽al脹t脹rabilmenizi
ve test senaryolar脹 oluturabilmesini salar
rnek
@RunWith(Suite.class)
@Suite.SuiteClasses({ InvoiceServiceTest.class, SummaryServiceTest.class,
LimitManagementUtil.class, InvoiceServiceUtilTest.class })
public final class ProjectRunSuite {
}