Nhập môn Unit Testing trong .NET

Phương pháp Unit Testing

Unit Testing là chiêu thức kiểm thử ứng dụng dựa trên những đơn vị chức năng kiểm thử ( hay unit test ). Trong những ngôn từ hướng đối tượng người tiêu dùng ( ví dụ C # ), những đơn vị chức năng kiểm thử này hoàn toàn có thể là những phương pháp hay lớp. Một đơn vị chức năng kiểm thử được dùng để kiểm tra một đơn vị chức năng việc làm ( unit of work ) với một tác dụng giả định nào đó ; Nếu tác dụng thực thi của đơn vị chức năng việc làm cần kiểm tra khác với hiệu quả giả định thì đơn vị chức năng kiểm thử thất bại .

Các đặc điểm của một đơn vị kiểm thử tốt

  • Tự động và có thể lặp
  • Dễ dàng thực thi
  • Có thể dùng trong tương lai
  • Chạy nhanh
  • Kết quả nhất quán
  • Kiểm soát đầy đủ hay toàn quyền (full control) các thành phần kiểm thử
  • Độc lập với các đơn vị kiểm thử khác
  • Khi thất bại, dễ dàng phát hiện ra những gì được mong đợi và xác định hướng giải quyết

Framework cho Unit Testing

Unit Testing có thể được thực hiện dễ dàng nhờ các framework. Framework phổ biến hỗ trợ cho các nhà phát triển .NET là NUnit vì nó dễ dùng, dễ nhớ, có nhiều tính năng nổi trội và dễ dàng cài đặt đến Visual Studio qua NuGet. Bên cạnh NUnit, một vài framework có thể được cân nhắc sử dụng cho dân .NET là xUnit hay MSTest (của Microsoft). Đối với các ngôn ngữ khác có thể sử dụng danh sách các framework tại https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks

Tạo dự án kiểm thử

Trong bài viết này, chúng ta sẽ minh học kỹ thuật Unit Testing bằng cách sử dụng framework NUnit trong Visual Studio 2017 Community. Để đơn giản, chúng ta sẽ tạo một dự án Console App (.NET Framework) tên UnitTestingDemo và thêm một lớp tên Calculator đến dự án này. Thay đổi nội dung tập tin Calculator.cs như sau:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace UnitTestingDemo

{

  public class Calculator

  {

    public int Add(int a, int b) {

      return a + b;

    }

    public int Sub(int a, int b)

    {

     return a - b;

    }

  }

}

Kế tiếp, thêm một lớp thư viện đến Solution bằng cách nhấn chuột phải vào Solution trong cửa sổ Solution Explorer chọn Add > New Project

Trong cửa sổ New Project chọn Class Library (.NET Framework), đặt tên lớp là Calculator_Test:

Nhấn OK. Đổi tên tập tin Class1.cs trong dự án Calculator_Test vừa tạo thành MyTesting.cs

Như vậy chúng ta đã hoàn thành việc tạo các dự án kiểm thử. Bây giờ chúng ta sẽ cài đặt framework NUnit. Trước khi kết thúc phần cài đặt này, chúng ta sẽ thêm một tham chiếu từ dự án Calculator_Test đến dự án UnitTestingDemo với mục đích là tham chiếu các lớp hay phương thức từ lớp UnitTestingDemo. Để làm điều này, nhấn chuột phải vào Calculator_Test, chọn Add > Reference. Trong cửa sổ Reference Manager chọn Project và dự án UnitTestingDemo:

Cài đặt NUnit

Để cài NUnit, trong Visual Studio 2017 chọn Tools > NuGet Package Manager > Manage NuGet Packages for Solution

Trong hành lang cửa số NuGet – Solution chọn tab Browse và gõ cụm từ ‘ nunit ‘ trong ô tìm kiếm và chọn NUnit tiên phong :

Bên khung cửa sổ NUnit bên phải chọn Project ( gồm có hai dự án Bất Động Sản ) và nhấn Install :

Nếu hộp thoại Preview Changes Open thì nhấn OK. Nếu setup thành công xuất sắc thì tác dụng từ hộp thoại Output sẽ như sau :

Đóng hành lang cửa số NuGet – Solution và Output. Trở lại hành lang cửa số Solution Explorer tìm đến mục Reference của hai sự án sẽ Open nunit.framwork :

Một cách tương tự, chúng ta cũng cài đặt NUnit3TestAdapter:

Mục đích thiết lập thư viện này là để thực thi những đơn vị chức năng kiểm thử NUnit trong Visual Studio .
Như vậy tất cả chúng ta đã setup thành công xuất sắc NUnit. Kế tiếp, tất cả chúng ta sẽ tìm hiểu và khám phá một vài thuộc tính và lớp quan trọng trước khi thực thi kiểm thử .

Các thuộc tính TestFixture, Test và lớp Assert

NUnit chứa hai thuộc tính TestFixture Test dùng để đánh dấu lớp và phương thức sẽ là các đơn vị kiểm thử (unit tests). Trước khi sử dụng hai thuộc tính này, chúng ta cần khai báo thư viện NUnit:


using NUnit.Framework;

Chúng ta muốn lớp MyTesting sẽ là lớp kiểm thử, thêm thuộc tính TestFixture và khai báo thư viện NUnit đến tập tin MyTesting.cs như sau:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using NUnit.Framework;

namespace Calculator_Test

{

  [TestFixture]

  public class MyTesting

  {

  }

}

Lưu ý rằng, thuộc tính TestFixture được đặt trong dấu ngoặc vuông.

Sau khi chọn lớp kiểm thử, chúng ta sẽ xây dựng hai phương thức Add_Test và Sub_Test dùng để kiểm thử các phương thức Add và Sub từ lớp Calculator. Lớp MyTesting được thay đổi như sau:


[TestFixture]

public class MyTesting

{

  [Test]

  public void Add_Test() {

  }

  [Test]

  public void Sub_Test() {

  }

}

Thuộc tính Test được đặt trong dấu ngoặc vuông để đánh dấu các phương thức là đơn vị kiểm thử. Trước khi viết vài đoạn mã cho hai phương thức Add_Test và Sub_Test, chúng ta sẽ tìm hiểu lớp Assert từ namespace NUnit.Framework.

Lớp Assert như là chiếc cầu nối giữa mã chương trình cần kiểm thử và NUnit. Một đơn vị kiểm thử sẽ dùng lớp này với mục đích khai báo một giả định nào đó là tồn tại và nếu các đối số được chuyển vào lớp Assert được thực hiện với kết quả khác với giả định thì đơn vị kiểm thử này thất bại.

Thay đối nội dung hai phương pháp Add_Test và Sub_Test như sau :


[TestFixture]

public class MyTesting

{

  [Test]

  public void Add_Test() {

     Calculator cal = new Calculator();

     int add_Result = cal.Add(3, 5);

     Assert.That(add_Result, Is.EqualTo(8));

  }

  [Test]

  public void Sub_Test() {

    Calculator cal = new Calculator();

    int sub_Result = cal.Sub(3, 5);

    Assert.That(sub_Result, Is.EqualTo(8));

  }

}

Chúng ta sử dụng phương thức That của lớp Assert để xác nhận một kết quả là đúng với giả định hay không. Trong hai phương thức Add_Test và Sub_Test, chúng ta gọi các phương thức Add và Sub từ lớp Calculator với các đối số là 3 và 5. Kết quả từ các phương thức này sẽ được so sánh với kết quả giả định là 8.

Thực hiện kiểm thử với công cụ Test Explorer

Chúng ta thực hiện kiểm thử bằng cách dùng công cụ Test Explorer từ mục Test trong Visual Studio 2017:

Cửa sổ Test Explorer như sau :

Chúng ta hoàn toàn có thể chọn Run All để chạy cả hai phương pháp kiểm thử hay tất cả chúng ta hoàn toàn có thể chọn một trong hai phương pháp và nhấn chuột phải chọn Run Selected Tests, ví dụ chọn Add_Test :

Kết quả :

Như vậy đơn vị chức năng kiểm thử Add_Test đã thành công xuất sắc vì tổng 3 và 5 là 8 khớp với tác dụng giả định. Tương tự, tất cả chúng ta thực thi Sub_Test :

Sub_Test đã thất bại vì hiệu quả hiệu 3 và 5 là – 2 khác với hiệu quả giả định là 8 .

Kết luận

Trong bài viết này chỉ giới thiệu một cách khái quát về kỹ thuật kiểm thử Unit Testing và cách cài đặt cũng như sử dụng framework NUnit trong Visual Studio 2017 Community. Một điều cần lưu ý rằng, để có thể thực hiện thành công việc kiểm thử với NUnit, trong Visual Studio 2017 chúng ta cần cài đặt hai gói thư viện NUnitNUnit3TestAdapter thông NuGet. Chúng ta cũng đã tìm hiểu các thuộc tính TestFixture, Test và lớp Assert từ namespace NUnit.Framework và cũng đã chạy thử các đơn vị kiểm thử bằng công cụ Test Explorer.

Chia sẻ:

Thích bài này:

Thích

Đang tải …