You are on page 1of 30

UNIT TEST

Nhm 10

Cc ni dung chnh
nh ngha Unit Test Tm quan trng Unit Test Phng php xy dng Unit Test Cc i tng thay th (MOCK Object) Cc kinh nghim trong Unit Test Cc cng c h tr

Unit Test l g?
- Unit Testing, kim tra tng b phn rt nh, tng unit ring bit trong source code ca chng trnh kim tra xem n c hot ng chnh xc khng. - T nhng b phn nh ny, ta li kim tra nhng unit ln hn c s dng nhng unit nh c kim tra .

Unit Test
- Mt Unit Test l mt phn ca source code, thc thi mt phn code chnh khc v so snh kt qu thc t vi kt qu mong i. - c thc hin bi cc lp trnh vin. - C th lm bng tay (Manual Unit Test) hoc t ng (Automated Unit Test)

Tm quan trng Unit Test


Li ch ca Unit Test: m bo cht lng tng Unit trong phn mm. Pht hin li sm v chnh sa kp thi Gim chi ph Ti s dng c Gip chng ta Design

Phng php xy dng Unit Test


Qu trnh thc hin Unit Test Unit test nn c xy dng cho mi module sau khi kim tra xong m ngun.

Phng php xy dng Unit Test


Thit k UT: theo trnh t sau: Thit lp cc iu kin cn thit: khi to cc i tng, xc nh ti nguyn cn thit, xy dng cc d liu gi Triu gi cc phng thc cn kim tra. Kim tra s hot ng ng n ca cc phng thc. Dn dp ti nguyn sau khi kt thc kim tra.
7

Phng php xy dng Unit Test


C 2 k thut ph bin: - Black box testing - White box testing

Phng php xy dng Unit Test


Phn tch cc tnh hung c th xy ra i vi m. Mi UT phi bt u vi trng thi fail v chuyn trng thi pass sau mt s thay i hp l i vi m chnh. Khi vit mt on m quan trng, hy vit cc UT tng ng. S lng Test Case ln pht hin im yu ca m theo nguyn tc:
Nu nhp gi tr u vo hp l th kt qu tr v cng phi hp l Nu nhp gi tr u vo khng hp l th kt qu tr v phi khng hp l
9

Phng php xy dng Unit Test


Sm nhn bit cc on m khng n nh v c nguy c gy li cao, vit UT tng ng khng ch. Nn to ra mt lp kim tra ring v nhng li nghim trng c th pht sinh t cc i tng quan trng. Nn kim tra li cc UT c, sau mt thi gian code. S dng nhiu phng thc kim tra khc nhau. Hy vit cng n gin cng tt. Cui cng, vit UT cng i hi s n lc, kinh nghim v s sng to nh vit PM.

10

MOCK OBJECTS (i tng thay th)

Cc nh ngha(what):
1. A mock object is simply a debug replacement for a real-world object (Andy Hunt, Dave Thomas Pragmatic unit testing in java with Junit) 2.

A mock object is an object created to stand in for an object that your code will be collaborating with. Your code can call methods on the mock object, which will deliver results as set up by your tests.
(Source: JUnit in Action, Vincent Massol)
11

c im
n gin hn i tng thc nhng vn gi c s tng tc vi cc i tng khc. Khng lp li ni dung i tng thc. Cho php thit lp cc trng thi ring tr gip kim tra.
12

MOCK OBJECTS(tt) S dng mocks khi no th thch hp(when):


C th s dng mock object m phng cc i tng tht(real object) sau: - Khng c hnh vi c th => khng th on trc kt qu - Kh ci t - X l chm - Kh xy ra v d gy li - Object lin quan giao din ngi dng - Object cha tn ti dng m (mi trn bn thit k)
13

MOCK OBJECTS(tt)
Thit k (how):
3 bc quan trng s dng cc i tng thay th trng kim th: 1. a ra interface m t i tng.

2. Vit ni dung cho i tng thc da trn interface 3. Trch interface t i tng tht v trin khai mock object(MO) da trn interface .

14

MOCK Object
INTERFACE

REAL CLASS

MOCK CLASS

TESTED FUNCTION
15

Cc Dng Mocks
C th dng nhiu k thut test cc module trong chng trnh:

1. Stubs 2. Mock 3. Test a servlet

16

Simple Stubs
Gi s gi hm getTime() tr v thi gian hin ti:
public long getTime() { return System.currentTimemillis(); }

public long getTime() { if(debug) { return debug_cur_time; } else{ return System.currentTimemillis(); } }

17

Mock
Kim th 1 lp truy xut c s d liu:
public class RealDAO { public string getName( long id) { //. } }

To 1 interface:
public interface Environmental { public long getTime(); // Other methods omitted... }

18

MOCK(tt)
p dng class interface cho lp mun kim th: public class SystemEnvironment implements Environmental {
public long getTime() { return System.currentTimeMillis(); } // other methods ...

}
19

MOCK(tt)
To class mock k tha t interface ny:

public class MockSystemEnvironment implements Environmental {


public long getTime() {
return current_time; }

public void setTime(long aTime) { current_time = aTime; } private long current_time; // ...

}
20

MOCK(tt)
S dng mock kim th cc chc nng lin quan:
public class PrintBill { public static string Print(string name) { string result; if (name == "XDPM") { result = "Xin dung phun em"; } else { result = "Unknown"; } return result; } }

21

MOCK(tt)
[TestFixture] public class PrintTest { [Test] public void XDPMTest() { MockDAO mock = new MockDAO(); string actualValue = PrintBill.Print(mock.GetName(0)); Assert.That(actualValue, Is.EqualTo("Xay dung phan mem")); } }

22

Test a Servlet
L nhng khi lnh ca 1 web server qun l. Yu cu cc URLs xc nh chuyn n container servlet. Cc URL ln lt gi cc code servlet. Sau servlet gi 1 reponse ti cc trnh duyt yu cu.
23

Test a Servlet(tt)
public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { String str_f = req.getParameter("Fahrenheit"); res.setContentType("text/html"); PrintWriter out = res.getWriter(); try { int temp_f = Integer.parseInt(str_f); double temp_c = (temp_f - 32)*5.0 /9.0; out.println("Fahrenheit: " + temp_f + ", Celsius: " + temp_c); g catch (NumberFormatException e) f out.println("Invalid temperature: " + str_f); } }
24

Test a Servler(tt)
Line 1

import junit.framework.* import com.mockobjects.servlet.*; public class TestTempServlet extends TestCase { public void test_bad_parameter() throws Exception { TemperatureServlet s = new TemperatureServlet(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); request.setupAddParameter("Fahrenheit", "boo!"); response.setExpectedContentType("text/html"); 15 s.doGet(request,response); response.verify(); assertEquals("Invalid temperature: boo!nn", response.getOutputStreamContents()); } public void test_boil() throws Exception { TemperatureServlet s = new TemperatureServlet(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); request.setupAddParameter("Fahrenheit", "212"); response.setExpectedContentType("text/html"); s.doGet(request,response); response.verify(); assertEquals("Fahrenheit: 212, Celsius: 100.0nn", response.getOutputStreamContents());

10

20

25 30

} 35

25

u im 1. m bo tnh chnh xc ca chng trnh 2. Pht hin li ngay t nhng phase u tin trong qu trnh pht trin phn mm 3. Sa i d dng hn 4. Tng kh nng tch hp code

26

Nhc im
1. Gy kh khn trong vic thc hin chuyn i gia i tng tht v i tng thay th(mocks) 2. Khng th lng trc nhng vn c th xy ra khi kt hp cc module vi nhau 3. Phi duy tr m hnh(maintain the mock)

27

Cc kinh nghim trong Unist test


Cc test c lp Cc Unit test phi nh v nhanh Unit test phi n gin thc hin Thit k code v test ng phng php Test mi chc nng mt ln Unit test m bo y v khng nh hng ln nhau Tn ca Test phi r rng, chnh xc Sa li ngay khi c pht hin
28

Cc cng c h tr
Junit CppUnit Cunit EasyMock HtmlUnit HttpUnit NUnit v.v
29

Demo NUnit

30

You might also like