Bài viết sẽ hướng dẫn các bạn từng bước tạo, chạy và tối ưu Unit tests sử dụng Microsoft unit test framework. Chúng ta sẽ bắt với 1 project C# đang trong giai đoạn phát triển, chúng ra sẽ tạo các tests và chạy nó, xem xét kết quả.
Yêu cầu
– Visual Studio 2015
– xem code ví dụ tại Sample Project for Creating Unit Tests.
1.Tạo một unit test project
Bạn cần tạo trước project với code ví dụ tại Sample Project for Creating Unit Tests.
- Click vào File menu, chọn Add, và chọn New Project ….
- Trong New Project dialog box, chọn Installed, chọn Visual C#, và chọn Test.
- trong danh sách, chọn Unit Test Project.
- Trong Name box, đặt tên là BankTest, và chọn OK.The BankTests project is added to the the Bank solution.
- Trong BankTests project, add reference đến BankAccount (project bạn muốn viết Unit test) trong solution.
2.Tạo một test class
Trong test project bạn đổi tên UnitTest1.cs thành BankAccountTests.cs. Sau đó bạn mở file BankAccountTests.cs và bạn sẽ thấy code bên dưới
// unit test code using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace BankTests { [TestClass] public class BankAccountTests { [TestMethod] public void TestMethod1() { } } }
Yêu cầu của một Test class
- attribute
[TestClass]
là bắt buộc trong Microsoft unit testing framework để được quản lý cho bất kỳ class nào chứa unit test methods - Mỏi test method phải chứa attribute
[TestMethod]
.
3.Tạo test method đầu tiên
Chúng ta sẽ viết unit test cho Debit
method trong class BankAccount
. .
Bằng các phân tích, chúng ta thấy được Debit method có ít nhất 3 trường hợp cần test:
- Method ném ra Exception
ArgumentOutOfRangeException
Nếu số tiền rút lớn hơn số tiền có trong tài khoản. - Method ném ra Exception
ArgumentOutOfRangeException
nếu số tiền rút nhỏ hơn 0. - Nếu việc kiểm tra 1 và 2 là đúng, method sẽ trừ số tiền rút ra khỏi tài khoản.
Trong thử nghiệm đầu tiên của chúng ta, chúng ta xác minh bằng một số tiền hợp lệ (số ít hơn số dư tài khoản và lớn hơn số không) và trả về một số tiền chúng ta đã xác định trước.
Tạo một test method
Chúng ta cập nhật file BankAccountTests.cs như bên dưới
using Microsoft.VisualStudio.TestTools.UnitTesting; using BankAccountNS; namespace BankTests { [TestClass] public class BankAccountTests { // unit test code [TestMethod] public void Debit_WithValidAmount_UpdatesBalance() { // arrange double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // act account.Debit(debitAmount); // assert double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly"); } } }
Trong test method Debit_WithValidAmount_UpdatesBalance chúng ta giả định tai khoản có beginningBalance = 11.99 và chúng ta sẽ rút debitAmount = 4.55 vậy số tiền còn lại phải là expected = 7.44. Chúng ta sử dụng AreEqual method để kiểm chứng tài khoản còn lại đúng với mong muốn.
Yêu cầu của Test method
- Test method phải có attribute
[TestMethod]
. - Test method phải return
void
. - Test method không có tham số.
4.Build và run test
- Trong Build menu, chọn Build Solution. Nếu không có lỗi, Test Explorer window sẽ xuất hiện(bên trái), Debit_WithValidAmount_UpdatesBalance sẽ được liệt kê trong nhóm Not Run Tests.
- Chọn Run All để run test. Trong Test Explorer status bar bắt đầu run. sau khi kết thúc test, thanh bar sẽ chuyển sang màu xanh lá test methods pass, hoặc đỏ nếu tests fail.
- Trong trường hợp tests fail. Test method được chuyển sang nhóm Failed Tests. click vào test method để xem chi tiết bên dưới.
5.Sửa lỗi và chạy lại Test
Phân tích kết quả test: sau khi chạy test method Debit_WithValidAmount_UpdatesBalance chúng ta sẽ thấy kết quả failure. các bạn click vào tên của method (bên trái) để xem chi tiết về kết quả.
AreEquals
method, hiển thị thống báo giá trị bạn mong đợi (the (Expected<XXX>parameter) và giá trị thực tế nhận được (the Actual<YYY> parameter). Chúng ta dự kiến số dư sẽ giảm so với ban đầu, nhưng thực tế nó lại tăng lên.
Chúng ta cần kiểm tra lại method Debit.
Nguyên nhân lỗi
m_balance += amount;
Cần sửa lại thành
m_balance -= amount;
Chạy lại test
Trong Test Explorer, chọn Run All để chạy lại hết các test method. Thanh trạng thái chuyển sanh màu xanh lá, và test được chuyển sang Passed Tests group.
Phần 2: Sử dụng Unit Test để cải thiện code
Bài viết Phần 1: Cách viết Unit Test trong C Sharp được dịch từ
https://msdn.microsoft.com/en-us/library/ms182532.aspx#BKMK_Create_a_unit_test_project
Pingback: Phần 2: Sử dụng Unit Test để cải thiện code | Phạm Duy Anh
Pingback: UnitTest và cách viết – Trung's Note