2010-02-10 28 views
14

Tôi tự hỏi cách tốt nhất để làm điều này là ... Tôi quan tâm đến việc giới thiệu PostSharp vào một trong các dự án của tôi, nhưng tôi không chắc chắn làm thế nào để đơn vị kiểm tra các lớp được đánh dấu bằng một thuộc tính đúng.Unit Testing and PostSharp

Ví dụ:

public class hello { 

    [MyAspectThatDoesSomethingToTheDatabaseWhenThisMethodGetsCalled] 
    public int omg(string lol) { 
     //fancy logic in here 
    } 
} 

Tôi muốn thử nghiệm logic trong phương pháp omg(), nhưng trong các bài kiểm tra đơn vị tôi cần phải chắc chắn rằng các khía cạnh không được gọi, bởi vì có không thực sự là một cơ sở dữ liệu.

Suy nghĩ?

Trả lời

0

Có thể bạn có thể sử dụng tiêm phụ thuộc và giới thiệu thuộc tính tĩnh cho lớp khía cạnh nơi bạn quyết định loại nhà cung cấp truy cập cơ sở dữ liệu nào bạn sử dụng (ví dụ: sử dụng nhà máy), thiết lập giả mạo trong phạm vi thử nghiệm.

3

Ý kiến ​​của tôi là bạn nên kiểm tra mã như thể khía cạnh được mã hóa theo cách thủ công - tức là kiểm tra đầy đủ chức năng của phương pháp, bao gồm các chức năng được triển khai theo khía cạnh.

Câu hỏi đặt ra bây giờ được ghi lại trong tài liệu trực tuyến PostSharp tại http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/2ad6cf92-08eb-4537-a434-d88a3e493721.htm

1

Tôi không đồng ý với Gael. Tôi đã học được từ một người bạn rằng tôi phải kiểm tra mã mà tôi sẽ viết và nói chung chỉ một lần.

3

Tôi không hoàn toàn chắc chắn cách thức hoạt động của postsharp, nhưng như tôi hiện đang hiểu, bạn gọi quy trình xây dựng bài đăng để dệt các khía cạnh vào IL.

Nếu hiểu biết của tôi là chính xác và nếu bạn có thể bỏ qua dệt hậu công trình thì bạn nên thử nghiệm phương pháp của mình trong sự thiếu hiểu biết (và kiểm tra khía cạnh riêng biệt ở một nơi khác).

Tại sao?

Nếu bạn kiểm tra các khía cạnh và phương pháp, bạn đang thử nghiệm 3 việc cùng một lúc:

  1. phương pháp
  2. khía cạnh
  3. dệt của các khía cạnh vào mã

Đây là nghiệp xấu và có thể dẫn bạn xuống hố thỏ nếu xảy ra sự cố (cũng như kiểm tra đơn vị của bạn thành thử nghiệm tích hợp).

Nhìn vào danh sách trên:

  • bạn làm cần phải thử nghiệm phương pháp, trong sự cô lập không có phiền nhiễu khác vì điều này sẽ cho phép bạn tập trung vào việc đảm bảo phương pháp nào chính xác những gì bạn mong đợi - không nhiều, không kém.
  • bạn không cần phải kiểm tra các khía cạnh mỗi khi nó được sử dụng, chỉ cần kiểm tra nó một lần và chắc chắn rằng nó làm những gì bạn nghĩ rằng nó
  • bạn không cần phải kiểm tra rằng các công trình dệt; nó là (nên được) thử nghiệm như là một phần của việc thực hiện bài sắc nét.
+0

Tốt hơn là viết các bài kiểm tra đơn vị, nhưng các bài kiểm tra tích hợp cũng không phải là xấu, đặc biệt nếu cách ly phương pháp từ khía cạnh quá khó. –

1

Để tắt các khía cạnh liên quan đến cơ sở dữ liệu trong mã của mình, tôi đã giới thiệu một lớp tĩnh có tên là TestingEnvironment với thuộc tính boolean có tên là TurnOffAspects. Các mã trong khía cạnh kiểm tra tài sản này và nếu nó được thiết lập để "true", các khía cạnh trả về mà không làm bất cứ điều gì. Trong khi thiết lập thử nghiệm, tôi đặt thuộc tính TestingEnvironment.TurnOffAspects thành true và trong khi kiểm tra teardown, trở về false. Tất nhiên bạn có thể làm cho mọi thứ chi tiết hơn giới thiệu một thuộc tính cho mỗi khía cạnh bạn có. Bạn nên chọn rất cẩn thận những khía cạnh bạn tắt, vì nó có thể có tác động lớn đến thử nghiệm của bạn và làm cho mã sản xuất của bạn không thành công ngay cả khi vượt qua kiểm tra.

2

Nếu bạn muốn viết kiểm tra UNIT thuần túy, hãy xem xét tắt PostSharp cho mô đun trong khi UNIT TESTING xây dựng bằng cách đặt biểu tượng biên dịch 'SkipPostSharp' trong dự án của bạn hoặc đặt thuộc tính MSBuild 'SkipPostSharp = True'.

Nếu bạn vui lòng làm tích hợp kiểm tra, bạn có thể kiểm tra đầy đủ chức năng của phương pháp và thuộc tính PostSharp, bao gồm cả quyền truy cập DB (như suggested by Gael).

0

Cách tiếp cận hiện tại của tôi là chạy thử nghiệm như là một phần của quá trình xây dựng trên TFS của chúng tôi. Điều này có thể không hữu ích cho tất cả các tình huống, nhưng tôi đã dành khá nhiều thời gian để tìm một giải pháp cho phép tôi chạy các bài kiểm tra đơn vị của logic nghiệp vụ của chúng tôi mà không có bất kỳ tác động nào của PostSharp.

Tôi đã tạo hai định nghĩa xây dựng khác nhau, một trong số đó có các đối số MSBuild được đặt thành /p:SkipPostSharp=True (đây là phương pháp chạy thử nghiệm đơn vị) và lần khác là False tương ứng. Ngoài ra, tôi đặt tùy chọn Disable Tests thành True cho định nghĩa xây dựng bằng cách sử dụng PostSharp.

Tôi biết điều này không lý tưởng (đặc biệt là vì hiện tại tôi không có khả năng chạy thử nghiệm cục bộ mà không có bất kỳ thay đổi nào), nhưng tôi không tìm được cách nào khác. Có vẻ như không có quá nhiều người có cùng vấn đề. Vì tôi là một người mới tuyệt đối về MSBuild và cấu hình của nó, có thể ai đó có kiến ​​thức tốt hơn có thể giúp đỡ.

Tôi cũng đã phát xung quanh với Configuration Manager trong Visual Studio để tạo định nghĩa xây dựng khác, nhưng tất cả nỗ lực của tôi chỉ tạo ra nhiều sự cố hơn bất kỳ thứ gì khác.

Các vấn đề liên quan