Professional Documents
Culture Documents
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,
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
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
Command Line
Thc thi Unit test bng phng php dng lnh, thao tc phc tp & c th gi thc hin auto
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]
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
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
37
38
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
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
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