Chuyển đến nội dung chính

Làm quen với SpecFlow+

Trong bài viết này, mình chỉ tổng hợp các bước để hiểu sơ lược về SpecFlow, và các bước để tạo 1 project .NET Core để thực thi SpecFlow. Với góc độ của 1 .NET programmer, mình chỉ mong muốn đây là bài tổng hợp thật rõ ràng và đơn giản.

Đầu tiên bạn cần nắm các khái niệm về TDD, BDD, và đây là nền tảng cơ sở để bắt đầu làm việc với SpecFlow, 1 .NET framework thực thi BDD, dựa trên ngôn ngữ C# và Gherkin.

TDD là gì

TDD (Test Driven Development) là một phương thức làm việc, hay một quy trình viết mã hiện đại. Lập trình viên sẽ thực hiện thông qua các bước nhỏ (BabyStep) và tiến độ được đảm bảo liên tục bằng cách viết và chạy các bài test tự động (automated tests). Quá trình lập trình trong TDD cực kỳ chú trọng vào các bước liên tục sau:
  1. Viết 1 test cho hàm mới. Đảm bảo rằng test sẽ fail.
  2. Chuyển qua viết code sơ khai nhất cho hàm đó để test có thể pass.
  3. Tối ưu hóa đoạn code của hàm vừa viết sao cho đảm bảo test vẫn pass và tối ưu nhất cho việc lập trình kế tiếp
  4. Lặp lại cho các hàm khác từ bước 1

Cycle BDD là gì? 

Behavior Driven Development (BDD) là một phần mở rộng của TDD. Giống như ở TDD, trong BDD chúng ta cũng viết các bài test trước và sau đó mới code ứng dụng để vượt qua những bài test đó. Sự khác biệt chính của BDD so với TDD chính là:
  • Các bài test hay các test case sẽ được viết bằng ngữ pháp tiếng Anh và mô tả rất đơn giản
  • Các bài test được xem như là hành vi của ứng dụng dựa trên những nhu cầu thực tế của người dùng với ứng dụng đó
  • Sử dụng các ví dụ để làm rõ các yêu cầu của ứng dụng
Hình ảnh bên dưới là ví dụ về những gì khách hàng có trong tâm trí của họ và truyền đạt cho nhóm các nhà phát triển và cách các nhà phát triển hiểu nó và làm việc với nó. Và đó là lý do tại sao nên sử dụng BDD thay vì TDD
Preception 

Gherkin là gì?

Gherkin là một ngôn ngữ đơn giản, nhẹ và có cấu trúc, sử dụng ngôn ngữ nói thông thường để mô tả các yêu cầu và kịch bản. Theo ngôn ngữ thông thường, chúng tôi có nghĩa là tiếng Anh, tiếng Pháp và khoảng 30 ngôn ngữ nữa.
Để hiện thực hóa BDD và Gherkin, chúng ta dùng SpecFlow

SpecFlow

Cài đặt

Bạn cần cài đặt các công cụ sau:
Hoặc bạn có thể cài đặt bằng cách: Menu => Extensions => Manage Extensions => Search SpecFlow => Download và cài đặt. Restart Visual Studio 2019

Ví dụ

Trong dự án này, bạn cần tạo 2 projects: 
  • Class Library: Project này chỉ chứa hàm Add để cộng 2 số
  • MSTest Test Project (.NET Core): dùng để chạy SpecFlow để kiểm tra kết quả 2 số
Tạo mới 1 Class Library, đặt tên là ExampleLibrary. Tạo 1 file class Calculator.cs với nội dung sau

public class Calculator
{
 public int FirstNumber { get; set; }
 public int SecondNumber { get; set; }

 public int Add()
 {
  return FirstNumber + SecondNumber;
 }
}

Tạo mới 1 project MSTest Test Project (.NET Core). Xóa file UnitTest1.cs.
Cài đặt các packages sau:
  • SpecFlow
  • SpecFlow.Tools.MsBuild.Generation
  • SpecRun.SpecFlow
Tạo 2 folers Features và Steps
Nhấp phải folder Features, chọn Add=> Class

File feature mới sẽ có nội dung như sau:

Feature: Calculator
 In order to avoid silly mistakes
 As a math idiot
 I want to be told the sum of two numbers

@mytag
Scenario: Add two numbers
 Given I have entered 50 into the calculator
 And I have entered 70 into the calculator
 When I press add
 Then the result should be 120 on the screen
Bạn cần sửa lại câu phát biểu sau And thành
And I have also entered 70 into the calculator
Nhấp phải vào file Calculator.feature, chọn Generate Step Definitions.
Chọn đường dẫn lưu vào thư mục Steps với tên file: CalculatorSteps.cs

[Binding]
public class CalculatorSteps
{
 private Calculator calculator = new Calculator();
 private int result;

 [Given(@"I have entered (.*) into the calculator")]
 public void GivenIHaveEnteredIntoTheCalculator(int number)
 {
  calculator.FirstNumber = number;            
 }

 [Given(@"I have also entered (.*) into the calculator")]
 public void GivenIHaveAlsoEnteredIntoTheCalculator(int number)
 {
  calculator.SecondNumber = number;
 }

 [When(@"I press add")]
 public void WhenIPressAdd()
 {
  result = calculator.Add();
 }
 
 [Then(@"the result should be (.*) on the screen")]
 public void ThenTheResultShouldBeOnTheScreen(int expectedResult)
 {
  Assert.AreEqual(expectedResult, result);
 }
}

Mở Test Explorer để kiểm tra kết quả.

Link download: https://www.mediafire.com/file/wos3g9e21r57xkz

Link tham khảo:

https://www.toolsqa.com/specflow/step-definition-file/
https://viblo.asia/p/cucumber-co-ban-ngon-ngu-gherkin-jamoG8ndRz8P
 https://www.mediafire.com/file/wos3g9e21r57xkz/SpecFlowTutorial.rar/filehttps://www.mediafire.com/file/wos3g9e21r57xkz/SpecFlowTutorial.rar/filehttps://www.mediafire.com/file/wos3g9e21r57xkz/SpecFlowTutorial.rar/file
Chúc các bạn thành công
Nhatkyhoctap's blog

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.