@manhng

Welcome to my blog!

Unit Testing Strategy

June 5, 2021 07:38

Unit Testing Strategy (edit)

Bài viết này tôi xin giới thiệu việc viết Unit Testing sử dụng TDD, DI, Dapper, Moq, Moq.Dapper, MSTest với XML

  • Build C# classes for any existing database (POCO)
  • Build C# result classes for any SQL query
  • Moq.Dapper: Unit Testing sử dụng Dapper
  • Dapper.QX: Unit Testing sử dụng Dapper
  • FakeItEasy & FluentValidation
  • Moq Repository với ADO.NET (ở cuối bài)

A WinForms SQL client for generating C# query result classes, Dapper productivity

UnoSD/Moq.Dapper: Moq extensions for Dapper methods. (github.com)

Không nên tạo static method với static class khi viết Unit Testing

unit testing - Fake Captcha from commonlibnet with FakeItEasy and FluentValidation - Stack Overflow

Chiến lược thực hiện

  • Bước 1: Tạo kế hoạch kiểm thử
  • Bước 2: Tạo các trường hợp thử nghiệm và dữ liệu thử nghiệm
  • Bước 3: Tạo tập lệnh để chạy các trường hợp thử nghiệm nếu có thể
  • Bước 4: Thực hiện các trường hợp thử nghiệm, khi mã đã sẵn sàng
  • Bước 5: Sửa các lỗi nếu có và kiểm tra lại mã
  • Bước 6: Lặp lại chu kỳ kiểm tra cho đến khi không còn các loại lỗi nữa

Tiêu chí nghiệm thu

  • Code Unit Testing phải đơn giản, dễ hiểu với các lập trình viên khác (OOP, SOLID)
  • Code Unit Testing phải code trước khi tạo ra Codebase được tạo ra (TDD)
  • Code Coverage phải đạt tối thiểu 75/100 tức là viết 100 dòng code thì code Unit Testing phải chạy qua 75 dòng
  • Database Testing: Unit Testing trên các thao tác CRUD (Không bao gồm Big Data Testing và Functional Testing)
  • Sử dụng công cụ tự động sinh ra class tương ứng với các bảng trong cơ sở dữ liệu một cách nhanh chóng (POCO)

Ngôn ngữ lập trình

Sử dụng ngôn ngữ lập trình CSharp trên nền tảng .NET Framework 4.6.1 và Visual Studio 2019 Enterprise chạy trên Windows 10 phiên bản mới nhất

Ví dụ đơn giản: Developer Points: C# Unit Testing: How to write unit test in C# with Moq (rajeevdotnet.blogspot.com)

Chiến lược tạo dữ liệu

Tạo các dữ liệu có sẵn dưới dạng tệp XML, để phản ánh các thực thể trong cơ sở dữ liệu, để tải lên ở phần khởi tạo dữ liệu khi chạy kiểm thử

Công cụ

Sử dụng các công cụ sau:

Tham khảo:

Dapper knowledge Base | Dapper Tutorial and Documentation (dapper-tutorial.net)

Unit Test Dapper with DapperParameters - Intertech Blog

The Fastest Way To Mock a Database for Unit Testing

The Fastest Way To Mock a Database for Unit Testing | DanylkoWeb

XML Serialization and Deserialization

Serialization/Deserialization Series: XML | DanylkoWeb

A simple UI to allow you to easily select which tables you want the EntityFramework Reverse POCO Code First Generator to use

sjh37/EntityFramework-Reverse-POCO-Generator-UI: A simple UI to allow you to easily select which tables you want the EntityFramework Reverse POCO Code First Generator to use. (github.com)

manhng83/EntityFramework-Reverse-POCO-Generator-UI: A simple UI to allow you to easily select which tables you want the EntityFramework Reverse POCO Code First Generator to use. (github.com)

The Dapper readme has no info on unit testing, and suprisingly there is not much tutorials online either.

The two main unit test libraries I was able to find were:

  • DapperWrapper (not updated since 2014!!! Does it still work?)
  • Moq.Dapper (requires .net core v2, but many people are still on VS2015+.net 4.6.2 or lesser)

When I google "unit test dapper" my top three results are:

The dapper repo, meanwhile, appears to have integration tests using a actual database. While having a database for integration tests is ideal, it should also be possible to mock the connection so a database is not required.

Creating a Repository Pattern without an ORM | DanylkoWeb

 

Categories

Recent posts