Phần 1: Cách viết Unit Test trong C#

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.

  1. Click vào File menu, chọn Add, và chọn New Project ….
  2. Trong New Project dialog box, chọn Installed, chọn Visual C#, và chọn Test.
  3. trong danh sách, chọn Unit Test Project.
  4. Trong Name box, đặt tên là BankTest, và chọn OK.The BankTests project is added to the the Bank solution.
  5. Trong BankTests project, add reference đến BankAccount (project bạn muốn viết Unit test) trong solution.

 

tạo test project

 

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:

  1. 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.
  2. Method ném ra Exception  ArgumentOutOfRangeException nếu số tiền rút nhỏ hơn 0.
  3. 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

  1. 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.
  2. 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.
  3. 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ả.

unit test result failded

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.

passed test 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

One thought on “Phần 1: Cách viết Unit Test trong C#

  1. Pingback: Phần 2: Sử dụng Unit Test để cải thiện code | Phạm Duy Anh

Leave a Reply

Your email address will not be published. Required fields are marked *