You are on page 1of 50

Software

Construction

NUnit
Ng Ngc ng Khoa
2011, April 8

UNIT TESTING

Tng quan
Unit Test (UT) l cc on m c cu trc ging nh cc i tng c xy dng kim tra cc thnh phn nh trong h thng phn mm nh cc hm, th tc, lp, phng thc,

Vai tr ca Unit Test


Cc on m Unit Test hot ng lin tc hoc nh k thm d v pht hin cc tim n, li k thut trong sut qu trnh pht trin.
Unit Test cn c gi l k thut test t ng

ng dng
Kim tra mi n v nh nht. Kim tra cc trng thi v rng buc ca i tng cc mc su hn. Kim tra cc quy trnh (process) v m rng hn l cc khung lm vic (workflow) c ng dng quan trng trong quy trnh pht trin phn mm XP.

Li ch
Thm d, pht hin li, duy tr s n nh. Pht hin cc thut ton thc thi khng hiu qu, cc th tc chy vt qu gii hn thi gian. Pht hin cc vn v thit k, x l h thng, thm ch cc m hnh thit k. Pht hin cc li nghim trng c th xy ra trong nhng tnh hung rt hp. To hng ro an ton cho cc khi m. Gii phng chuyn vin QA khi cc cng vic kim tra phc tp.

Cc trng thi
PASS

FAIL

Unit Test
IGNORE

Qu trnh

1
Thit lp cc iu kin

2
Gi phng thc cn kim tra

3
Kim tra s hot ng ca phng thc

4
Dn dp ti nguyn sau khi kt thc kim tra
8

Ngi thc hin


Phi c kin thc v coding v thit k chng trnh. K thut s dng l white-box testing. Cn c c t ca module v source code ca module . Phi chun b trc cc test case v test script v s c ti s dng. Cn c thc hin cng sm cng tt trong qu trnh PTPM. Thc thi t ng tt c Unit Test mi khi c mt s thay i quan trng.
9

NUNIT

10

Tng quan
xUnit ?
xUnit framework : JUnit, CppUnit, NUnit,

11

Chun b
Download NUnit (bin)
http://www.nunit.org/index.php?p=downlad

Cn quan tm
NUnit-2.5.10.11092\bin\net-2.0\framework\*.dll NUnit-2.5.10.11092\bin\net-2.0\nunit.exe NUnit-2.5.10.11092\bin\net-2.0\nunit-console.exe

12

Quy tc
Project NUnit
c to ring Add reference ti nunit.framework.dll Verify cc hm cn kim tra thng qua Assert

13

V d

14

Thc thi test


GUI Runner
Thc thi Unit test qua ca s giao din, thao tc n gin, tuy nhin kh thc hin auto

Command Line
Thc thi Unit test bng phng php dng lnh, thao tc phc tp & c th gi thc hin auto

Mt s phng php khc


SharpDevelop
MonoDevelop

TestDriven.NET

15

GUI Runner

16

Command Line
Add th mc bin ca NUnit vo bin mi trng PATH

Chy cmd & thc thi unit test vi lnh nunit-console.exe <ng dn>

17

Quy tc
Cc hm test vit vi mc ch r rng, c th S lng hm dng test 1 hm c th c th nhiu hn 1

18

Classic Asserts
Xem NUnit-2.5.10.11092\doc\assertions.html Mt s assertion tiu biu
Assert.AreEqual(3.33, 10.0/3.0, 0.01); Assert.GreaterOrEqual(x, y) Assert.LessOrEqual(x,y) Assert.IsNull(object [, string message]) Assert.IsNotNull(object [, string message]) Assert.AreSame(expected, actual [, string message]) Assert.IsTrue(bool condition [, string message]) Assert.Fail([string message]) ...
19

Constraint-based Asserts
Xem NUnit-2.5.10.11092\doc\constraintModel.html Mt s assertion tiu biu
Assert.That(actual, Is.EqualTo(expected)) Assert.That(actual, Is.Not.EqualTo(expected)) Assert.That(actual, Is.AtMost(expected)) Assert.That(actual, Is.AtLeast(expected)); Assert.That(expected, Is.Null); Assert.That(expected, Is.Not.Null); Assert.That(expected, Is.Empty); Assert.That(actual, Is.InstanceOfType(expected)); Assert.That(actual, Has.Length(expected)); ...

20

Attributes
[TestFixture]
[Test]

=> class s c test => hm s c test

21

Test selection
GUI Runner: chn test & Run Command Line:

22

Category
C th phn cc hm test tuz theo mc ch S dng attribute Category phn loi

23

24

Setup & TearDown


Mi unit test phi thc thi c lp vi cc unit test khc => phi reset mi trng test gia cc ln test

25

V d

26

V d (tt)

27

RHINO MOCKS

28

V d
public class Item { public static List<Product> GetProducts() { // Get database connection string string conString = ConfigHelper.GetDBConnectionString(); // Get data provider DataProvider dp = new DataProvider(conString); // Return list of products return dp.GetProducts(); } }
29

V d
[TestFixture] public class ItemTest { [Test] public void GetProductsTest() { List<Product> results = Product.GetProducts(); Assert.AreEqual(3, results.Count); } }

30

Why?
real object has non-deterministic behavior real object is difficult to set up real object has behavior that is hard to cause (e.g., network error) (similar to 1) real object is slow real object has (or is) a UI

31

Why?
test needs to query the object, but the queries are not available in the real object real object acts "normal" most of the time, but once a month (or even less often) it does something "exceptional" real object does not yet exist

32

What?
Mock object
L mt i tng o M phng cc tnh cht v hnh vi ging ht nh i tng thc c truyn vo bn trong khi m ang vn hnh Nhm kim tra tnh ng n ca cc hot ng bn trong.

33

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.

34

Li ch
m bo cng vic kim nghim khng b gin on bi cc yu t bn ngoi, gip cc chuyn vin tp trung vo mt chc nng nghip v c th => UnitTest vn hnh nhanh hn. Gip tip cn hng i tng tt hn. Nh MO c th pht hin interface cn tch mt s lp. D dng cho vic kim nghim.
35

How?

a ra interface m t i tng

Vit ni dung cho i tng thc da trn interface nh thng thng

Trch interface t i tng thc v trin khai MO da trn interface


36

Mock Objects Frameworks


NMock NMock2 EasyMock Rhino Mocks

37

State vs. Behavior Verification


State-based verification: lnh cui cng lun l assert Behavior verification:
Khng kt thc vi assert The interaction of the objects being tested is verified

38

State vs. Behavior Verification


Mock Object Framework c th c dng thc hin 2 loi unit test
State verification Behavior verification (state vs. interaction-based testing)

39

Stub
Mock Object Framework c kh nng to stub (Stub l s thay th cho i tng tht) ng dng
Db, file system => thc thi test m khng cn cu hnh i tng, hm cha ci

40

Rhino Mocks
Download
http://ayende.com/projects/rhino-mocks/downloads.aspx

41

State Verification w/ RM
C th dng RM to stub cho interfaces, abstract classes & concrete classes
Khng th dng RM to stub cho static hay sealed methods

C th dng RM gi lp kt qu tr v t class hoc interface

42

Demo

43

Behavior Verification w/ RM
C th dng RM m bo 1 b cc object hnh ng nh mong i
Hm c gi ng s ln mong i vi ng cc tham s mong i

Rt hu dng khi khng th test state


Object KHNG c public property

44

Behavior Verification w/ RM
Test code c chia lm 2 section
Record expectations Expectations are tested against reality

45

Demo

46

Create mock?
CreateMock<T>() DynamicMock<T>() PartialMock<T>()

47

Create mock?

48

Demo

49

Software

Construction

Thank You!
Ng Ngc ng Khoa
2011, April 8

50

You might also like