Cấp bậc tác giả:

TRAINING

Làm thế nào để return default(Type) trong Runtime- Ví dụ về kiểm thử đơn vị

Được viết bởi QuangIT ngày 05/02/2013 lúc 11:20 PM
Tôi muốn bạn đọc hết trước khi hỏi, tôi muốn bạn hiểu thế nào là TDD(Test Driven Design), làm cách nào sử dụng TDD?
  • 0
  • 7485

Làm thế nào để return default(Type) trong Runtime- Ví dụ về kiểm thử đơn vị

Tôi muốn bạn đọc hết trước khi hỏi, tôi muốn bạn hiểu thế nào là TDD(Test Driven Design), làm cách nào sử dụng TDD?
TestDrivenDesign.PNG
Test 1: handle null input
Hãy viết ví dụ mẫu kiểm thử đầu tiên. Khi giá trị null được return null:
  1. [Test]
  2. public void GetDefault_PassNull_ReturnNull()
  3. {
  4.     var result = DefaultCreator.GetDefault(null);
  5.  
  6.     Assert.That(result, Is.Null);
  7. }
Bây giờ tất cả chúng ta cần là kiểm tra chương trình  và thực hiện yêu cầu này cũng đơn giản:
  1. public class DefaultCreator
  2. {
  3.     public static object GetDefault(Type type);
  4.     {
  5.         return null;
  6.     }
  7. }
Mặc dù điều này có vẻ như gian lận này là cách để tạo ra các thiết kế mảnh , thay vì tạo ra tất cả trả trước Tôi hy vọng rằng mọi thứ sẽ nhận được rõ ràng hơn trong tiến trình này chỉ cần lưu ý rằng trường hợp kịch bản tồi tệ hơn là chúng ta có kiểm thử để kiểm tra điều gì sẽ xảy ra nếu null.
Test 2: reference types
Nếu T là một đối tượng mặc định (T) sẽ trả về null:
  1. [Test]
  2. public void GetDefault_PassObject_ReturnNull()
  3. {
  4.     var result = DefaultCreator.GetDefault(typeof(object));
  5.  
  6.     Assert.That(result, Is.Null);
  7. }
Chạy kiểm thử cho thấy một tính năng tuyệt với của thiết kế điều khiển - kiểm thử đi! và ngay bây giờ chúng ta có một lớp mà đáp ứng hai trong số ba yêu cầu.

Test 3: primitives
Tất cả chúng ta cần phải thực hiện ngay bây giờ là làm thế nào để behave kiểu giá trị:
  1. [Test]
  2. public void GetDefault_PassInteger_Return0() 
  3. {
  4.     var result = DefaultCreator.GetDefault(typeof(int));
  5.  
  6.     Assert.That(result, Is.EqualTo(0));
  7. }

Và viết giải pháp đơn giản:
  1. public class DefaultCreator
  2. {
  3.     public static object GetDefault(Type type)
  4.     {
  5.         if (type == typeof(int)) 
  6.         {
  7.             return 0;
  8.         }
  9.  
  10.         return null;
  11.     }
  12. }
Quá tốt, nhưng chúng a không thực hiện - sau khi kiểm thử cho float, double và sắp xếp mang lại giải pháp này:
  1. public class DefaultCreator
  2. {
  3.     public static object GetDefault(Type type)
  4.     {
  5.         if (type.IsPrimitive) 
  6.         {
  7.             return 0;
  8.         }
  9.  
  10.         return null;
  11.     }
  12. }

Test 4: Structs

  1. [Test]
  2. public void GetDefault_PassStruct_ReturnEmptyStruct() 
  3. {
  4.     var result = DefaultCreator.GetDefault(typeof(MyStruct));
  5.  
  6.     Assert.That(result, Is.TypeOf<MyStruct>());
  7. }
Bây giờ chúng ta đã có một kiểm thử sai - chúng ta có thể thêm các chức năng để sửa chữa nó:
  1. public class DefaultCreator
  2. {
  3.     public static object GetDefault(Type type)
  4.     {
  5.         if (type.IsValueType) 
  6.         {
  7.             return Activator.CreateInstance(type);
  8.         }
  9.  
  10.         return null;
  11.     }
  12. }
Chạy tất cả các kiểm thử- chúng ta có một lớp mà bắt chước mặc định (T) tại runtime tại một thời điểm.

Kết thúc
Tất nhiên tôi có thể tạo ra lớp này mà không có các kiểm thử đơn vị, nhưng tôi muốn thể hiện một ví dụ (nhưng không quá đơn giản) đơn giản cho thấy làm thế nào để sử dụng các kiểm thử đơn vị như một công cụ thiết kế.

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML