1. NUNIT FRAMEWORK
(minhtri.itp@gmail.com)
I. GIỚI THIỆU NUNIT FRAMEWORK................................................................................... 2
II. CÀI ĐẶT ................................................................................................................................ 3
A. YÊU CẦU HỆ THỐNG ............................................................................................... 3
B. CÀI ĐẶT & CẤU HÌNH.............................................................................................. 3
C. THỰC THI NUNIT.................................................................................................... 17
D. VIẾT UNIT TEST VỚI NUNIT ................................................................................ 18
E. PROJECT TEST MẪU THAM KHẢO..................................................................... 23
2. I. GIỚI THIỆU NUNIT FRAMEWORK
NUnit là ứng dụng unit test mã nguồn mở cho các ứng dụng chạy trên nền tảng MS.NET
. NUnit được tạo ra với cùng mục đích sử dụng như JUnit (unit test cho Java) và là một
trong các thành viên của gia đình XUnit dành cho các ngôn ngữ lập trình khác.
Vấn đề chúng ta cần quan tâm là unit test được thực hiện ở giai đoạn nào và được thực
hiện bởi ai trong quá trình phát triển phần mềm. Ở đây chỉ tóm gọn giai đoạn tương tác
giữa lập trình viên và kiểm định viên.
Sau khi bộ phận lấy yêu cầu từ khách hàng, phân tích yêu cầu, thiết kế tổng thể hệ thống
phân tích thiết kế chi tiết cho từng chức năng của phần mềm và chuyển sang cho lập trình
viên tiến hành lập trình.
Lập trình viên tiến hành code/debug chức năng của mình theo thiết kế chi tiết.
Sau đó lập trình viên sẽ tiến hành unit test lại chức năng của mình theo các test case cơ
bản được lập dựa trên đặc tả yêu cầu, thiết kế chi tiết và một số case cơ bản quy định
chung của phần mềm (maxlenght, định dạng, font chữ,thông báo...) Chỉ khi nào các test
case của unit test đã pass hết thì mới chuyển giao cho bộ phận kiểm thử tiến hành test tích
hợp và test hệ thống.
Giai đoạn test unit có thể thực hiện test bằng tay hoặc test tự động bằng code
Test bằng tay (Test hộp đen): Qua kinh nghiệm làm việc nhận thấy rằng nếu unit
test bằng tay thì nên thực hiện cho các lập trình viên test chéo các chức năng của
người khác và ngược lại người khác test chức năng của mình. Với lý do như sau
lập trình viên viết code trên chức năng của mình lúc nào cũng là đúng nên mới
viết như vậy và họ chỉ nghĩ ra các case bị giới hạn của họ. Nên để chính lập trình
viên test chức năng của mình sẽ dễ bị sót lỗi.
Test tự động (Test bằng code – Test hộp trắng): Nên để cho lập trình viên làm
chức năng nào thì tự viết code test unit cho chức năng của mình. Không thực hiện
Programmers
Analysts/Designer
Technical engineer
Tester
3. test chéo với lý do người viết test case phải xem lại code của lập trình viên khác
nên mất rất nhiều thời gian.
Phần tiếp theo sẽ giới thiệu cách thực hiện unit test tự động bằng code với NUnit
Framework
II. CÀI ĐẶT
A. YÊU CẦU HỆ THỐNG
Visual Studio bất kỳ phiên bản nào
Net Framework 2.0 +
B. CÀI ĐẶT & CẤU HÌNH
NUnit có thể được cài đặt bằng 2 cách sau:
1. Cài đặt bằng cách download source từ website:
http://www.nunit.org/index.php?p=download
2. Cài đặt thông qua NuGet Package Manager.
Tài liệu này sẽ giới thiệu các cài đặt Nunit thông qua NuGet.
Trước hết chúng ta cần cài đặt NuGet.
Trước khi cài đặt đặt chúng ta nên kiểm tra là lại là đã cài đặt NuGet vào Visual
Studio hay chưa. Thực hiện kiểm tra bằng cách chọn menu tool của VS và tìm đến
“Library Package Manager” -> “Package Manager Console” . Nếu thông tin hiển
thị như hình bên dưới thì NuGet đã được cài đặt vào VS rồi và chúng ta không
cần phải cài lại. Ngược lại chúng cần thực hiện cài đặt NuGet.
4. (Hình minh họa kiểm tra NuGet đã được cài đặt)
Để cài đặt chúng ta vào Menu Tool->Click chọn Extension Manager. Khi đó của
sổ Extension Manager được mở ra chúng ta chọn tab Online Gallery. Tiếp theo
chúng ta gõ NuGet vào ô tìm kiếm phía trên bên phải của cửa sổ để tìm kiếm. Khi
đó giao diện tìm kiếm sẽ hiển thị “NuGet Package Manager” chúng ta click chọn
download để tiến hành cài đặt.
5. (Hình minh họa tìm kiếm NuGet package online)
Sau khi download thành công chúng ta click Install để cài đặt.
6. (Hình minh họa cài đặt NuGet Package Manager sau khi download thành công)
Sau khi cài đặt thành công chúng ta click close để đóng cửa sổ cài đặt lại
(Hình minh họa cài đặt NuGet Package Manager thành công)
Sau khi cài đặt tại của sổ Extension Manager chúng ta chọn Restart Now để
restart lại VS.
7. Phần tiếp theo sẽ hướng dẫn cài đặt Unit test project với ASP.Net MVC bằng 2
cách sau:
1. Tạo NUnit test project ngay khi tạo project chính
Để thực hiện chúng ta cần phải cài đặt template nunit test cho mvc.
Vào menu tool chọn Extension Manager. Sau khi cuar soor
Extension Manager hiển thị chúng ta click chọn tab Online
Gallery. Tiếp theo nhập vào ô tìm kiếm phía trên bên phải nội
dung “ASP.NET MVC NUnit” và nhấn Enter để tìm kiếm. Sau đó
tại mục “ASP.NET MVC NUnit” click download để tiến hành cài
đặt NUnit template.
(Hình minh họa tìm kiếm ASP.NET MVC NUnit template)
8. Sau khi download thành công click Install để cài đặt)
(Hình minh họa download thành công ASP.NET MVC NUnit)
Lưu ý sau khi cài đặt thành công phải restart lại VS thì template
mới được load lên khi tạo mới project.
Bước tiếp theo sẽ hướng dẫn tạo ASP.NET MVC 3 với NUnit
project.
Vào menu file chọn new -> chọn project. Khi cửa sổ new project
mở ra chúng ta chọn các thông tin theo hình hướng dẫn bên
dưới.Tiếp theo chúng ta nhấn OK để tạo project.
9. Tiếp theo chúng ta sẽ check chọn “Create Unit test project”. Tiếp
theo tại combobox Test framework chúng ta chọn Nunit theo hình
hướng dẫn sau:
10. (Hình minh họa tạo unit test với NUnit framework)
Tiếp theo click OK để tạo mới. Sau khi tạo mới thành công NUnit
test project sẽ có cấu trúc như sau:
11. (Hình minh họa cấu trúc NUnit test project)
2. Tạo NUnit test project sau khi tạo project chính
Sau đây là phần hướng dẫn tạo NUnit Test sau khi tạo project.
Tại của sổ Solution Explorer. Click chuột phải vào solution->
Chọn Add-> Chọn New Project.
12. (Hình minh họa add NUnit test project sau khi đã tạo project chính cần test)
Khi cửa sổ new project mở ra chúng ta chọn loại project là Class
Library. Tiếp theo click OK để tạo mới project theo hình hướng
dẫn sau:
13. (Hình minh họa chọn loại project cho NUnit project )
Sau khi tạo mới thành công chúng ta reference project chính vào
NUnit test project. Bằng cách click chuột phải vào References
chọn Add Reference. Khi cửa sổ Add Reference mở lên chọn tab
Project. Sau đó chọn project cần test unit vào và click Add để thực
hiện theo hình hướng dẫn sau.
14. (Hình minh họa add Reference project chính vào NUnit test project)
Các bước tiếp theo sẽ hướng dẫn install NUnit test vào project đã
chọn ở trên.
Tiếp theo chúng ta sẽ mở của sổ Package Manager Console để tiến
hành cài đặt NUnit. Tiếp theo chọn menu tool->Library Package
Manager -> Package Manager Console. Thực hiện theo hình minh
họa sau
15. (Hình minh họa chọn Package Manager Console để cài đạt NUnit)
Sau khi cửa sổ Package Manager Console được mở chúng ta chọn
project cần cài đạt Nunit gõ lệnh PM> Install-Package NUnit để
tiến hành cài đặt NUnit
(Hình minh họa cài đặt NUnit)
16. (Hình minh họa cài đặt NUnit thành công)
Sau khi cài đặt thành công NUnit project sẽ có cấu trúc như sau:
(Hình minh họa cấu trúc NUnit test project sau khi cài đặt)
Để thực thi NUnit từ VS chúng ta cần instal NUnit.Runners thực thi cài đặt
NUnit.Runners tương tự như NUnit bằng cách gõ lệnh “Install-Package
NUnit.Runners” vào cửa sổ Package Manager Console
Sau khi cài đặt NUnit.Runners chúng ta vào menu Tool trên VS chọn External
tools tạo tool thực thi cho NUnit như hướng dẫn sau:
17. (Hình minh họa tạo NUnit runner tool)
C. THỰC THI NUNIT
Sau khi đã cài đặt và cấu hình External tool cho NUnit chúng ta tiến hành thực thi
bằng cách chọn vào project cần thực thi unit test. Tiếp theo vào menu tool click
NUnit.Khi đó VS sẽ gọi NUnit thực thi test.
18. (Hình minh họa run Unit test với NUnit)
D. VIẾT UNIT TEST VỚI NUNIT
Để viết được unit test với NUnit chúng ta cần phải nắm được các khái niệm cơ
bản của NUNIT (Tham khảo thêm tài liệu tại http://www.nunit.org)
1. Assertions
Assertions là thành phần trọng tâm của unit test trong bất kỳ
XUnit test framework nào.
NUnit cung cấp một tập hợp nhiều phương thức tĩnh của lớp Assert
Nếu một Assert bị fail phương thức gọi không trả về giá trị và lỗi
được thông báo. Nếu một unit test case có nhiều Assert thì khi có
một Assert lỗi thì xem như test case đó bị fail và sẽ không được
thực thi. Vì lý do này nên dùng một Assert cho mỗi test case
Sau đây là một số loại Asserts
Equality Asserts (Kiểm tra bằng giữa giá trị mong đợi và
thực tế)
19. Identity Asserts (Kiểm tra giống nhau)
Comparison Asserts (So sánh)
Assert.AreEqual( int expected, int actual );
Assert.AreEqual( int expected, int actual, string message );
Assert.AreEqual( int expected, int actual, string message,
params object[] parms );
Assert.AreEqual( uint expected, uint actual );
Assert.AreEqual( uint expected, uint actual, string message );
Assert.AreEqual( uint expected, uint actual, string message,
params object[] parms );
Assert.AreNotEqual( int expected, int actual );
Assert.AreNotEqual( int expected, int actual, string message );
Assert.AreNotEqual( int expected, int actual, string message,
params object[] parms );
Assert.AreSame( object expected, object actual );
Assert.AreSame( object expected, object actual, string message );
Assert.AreSame( object expected, object actual, string message,
params object[] parms );
Assert.AreNotSame( object expected, object actual );
Assert.AreNotSame( object expected, object actual, string message );
Assert.AreNotSame( object expected, object actual, string message,
params object[] parms );
Assert.Contains( object anObject, IList collection );
Assert.Contains( object anObject, IList collection,
string message );
Assert.Contains( object anObject, IList collection,
string message, params object[] parms );
20. Type Asserts (Kiểm tra loại)
Condition tests (Kiểm tra điều kiện khác)
Assert.Greater( int arg1, int arg2 );
Assert.Greater( int arg1, int arg2, string message );
Assert.Greater( int arg1, int arg2, string message,
object[] parms );
Assert.Less( int arg1, int arg2 );
Assert.Less( int arg1, int arg2, string message );
Assert.Less( int arg1, int arg2, string message,
object[] parms );
Assert.Less( uint arg1, uint arg2 );
Assert.Less( uint arg1, uint arg2, string message );
Assert.Less( uint arg1, uint arg2, string message,
object[] parms );
Assert.Less( decimal arg1, decimal arg2 );
Assert.Less( decimal arg1, decimal arg2, string message );
Assert.Less( decimal arg1, decimal arg2, string message,
object[] parms );
Assert.Less( double arg1, double arg2 );
Assert.Less( double arg1, double arg2, string message );
Assert.Less( double arg1, double arg2, string message,
object[] parms );
Assert.Less( float arg1, float arg2 );
Assert.Less( float arg1, float arg2, string message );
Assert.Less( float arg1, float arg2, string message,
object[] parms );
Assert.Less( IComparable arg1, IComparable arg2 );
Assert.Less( IComparable arg1, IComparable arg2, string message );
Assert.Less( IComparable arg1, IComparable arg2, string message,
object[] parms );
Assert.IsInstanceOfType( Type expected, object actual );
Assert.IsInstanceOfType( Type expected, object actual,
string message );
Assert.IsInstanceOfType( Type expected, object actual,
string message, params object[] parms );
Assert.IsNotInstanceOfType( Type expected, object actual );
Assert.IsNotInstanceOfType( Type expected, object actual,
string message );
Assert.IsNotInstanceOfType( Type expected, object actual,
string message, params object[] parms );
Assert.IsAssignableFrom( Type expected, object actual );
Assert.IsAssignableFrom( Type expected, object actual,
string message );
Assert.IsAssignableFrom( Type expected, object actual,
string message, params object[] parms );
Assert.IsNotAssignableFrom( Type expected, object actual );
Assert.IsNotAssignableFrom( Type expected, object actual,
string message );
Assert.IsNotAssignableFrom( Type expected, object actual,
string message, params object[] parms );
22. SetUpAttribute (Nơi khai báo các hàm dùng chung sẽ được
thực thi trước các phương thức test
TearDownAttribute (Nơi khai báo tập hợp các hàm dùng
chung sau khi thực hiện mỗi phương thức test)
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
[TestFixture]
public class SuccessTests
{
[Test] public void Add()
{ /* ... */ }
public void TestSubtract()
{ /* backwards compatibility */ }
}
}
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* ... */ }
[TearDown] public void Dispose()
{ /* ... */ }
[Test] public void Add()
{ /* ... */ }
}
}
23. Và một số thuộc tính khác (tham khảo tại
http://www.nunit.org)
E. PROJECT TEST MẪU THAM KHẢO
namespace NUnit.Tests
{
using System;
using NUnit.Framework;
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* ... */ }
[TearDown] public void Dispose()
{ /* ... */ }
[Test] public void Add()
{ /* ... */ }
}
}