2013-04-04 28 views
39

Tôi đang sử dụng MSTest và tôi muốn đặt cùng một danh mục thử nghiệm cho tất cả các phương thức trong lớp thử cùng một lúc mà không đặt thuộc tính TestCategory cho từng phương pháp riêng lẻ. Điều này có thể giải quyết như thế nào?Cách đặt danh mục thử nghiệm cho tất cả các bài kiểm tra trong lớp

Cách thuận tiện nhất và rõ ràng nhất là đặt thuộc tính TestCategory trên lớp, nhưng chỉ có thể áp dụng cho các phương thức.

Mục tiêu cuối cùng là bỏ qua các kiểm tra tích hợp trong khi chạy thử trên TFS đăng ký.

+3

Thú vị. Đừng nghĩ rằng nó có thể đánh dấu tất cả các phương thức trong lớp với thuộc tính làm việc với các thử nghiệm TFS. TFS hiểu TestCategory và Priority và các thuộc tính này chỉ có phương pháp cụ thể. Bạn có thể di chuyển các bài kiểm tra tích hợp để tách dự án và chỉ TFS không chạy nó. – nikita

+2

Bạn có thể tách các bài kiểm tra đơn vị và tích hợp của mình thành hai hội đồng khác nhau và sau đó cấu hình xây dựng của bạn cho phù hợp? –

+0

Vâng, chúng tôi có hàng tá thư viện và mỗi thư viện có một thư viện kiểm tra tương ứng có thể chứa cả hai bài kiểm tra đơn vị và tích hợp. Tách mỗi người trong số họ vào một thư viện cho đơn vị và một thư viện để kiểm tra tích hợp là có thể, nhưng không giống như cách tiếp cận thanh lịch nhất. – alex

Trả lời

2

Một cách để vượt qua giới hạn này là đặt danh mục thử nghiệm vào đầu mỗi phương pháp thử nghiệm. Ví dụ, đặt tên cho đơn vị của bạn kiểm tra

public void UnitTestDoSomething_ExpectThis() 

và thử nghiệm hội nhập của bạn

public void IntegrationTestDoSomething_ExpectThis() 

Sau đó, khi bạn làm truy vấn TFS của bạn để có được các bài kiểm tra tích hợp bạn có thể làm

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

Mặc dù đây không phải là một giải pháp hoàn hảo, nó sẽ giúp bạn phân biệt các bài kiểm tra của bạn trong mã và TFS. Ngoài ra, bạn có thể xem các đường dẫn vùng và lặp lại.

+0

Nhưng bạn sẽ làm gì với nhiều danh mục? – Dagrooms

2

Bạn có thể nhóm theo "Tên lớp" vào bảng Kiểm tra Explorer.

Với thuộc tính TestCategory thử nghiệm, bạn không thể giải quyết vấn đề của mình chỉ vì thuộc tính trong C# là siêu dữ liệu và không thể được sử dụng làm giá trị động.

4

Mục tiêu cuối cùng là bỏ qua các kiểm tra tích hợp trong khi chạy thử trên TFS đăng ký.

Có nhiều cách khác để thực hiện việc này. Trong bản dựng TFS của bạn, you can set which unit tests you want to run, depending on their assembly name.

Là hành vi mặc định, nó sẽ chạy tất cả các kiểm tra đơn vị trong các hội đồng có "kiểm tra" trong tên của chúng. Một sửa chữa đơn giản là đổi tên các bài kiểm tra tích hợp của bạn thành một bài kiểm tra không bao gồm "kiểm tra".


Nếu bạn muốn sử dụng loại, bạn có thể thử sử dụng AOP. Ví dụ, với Postsharp, bạn có thể tạo một khía cạnh trong hội đồng kiểm tra tích hợp của mình là puts the attribute on the method. Sau đó kích hoạt khía cạnh cho tất cả các phương thức công khai trong assembly tích hợp của bạn nếu tất cả các bài kiểm tra được nhóm lại thành một dll hoặc trên mỗi lớp thử nghiệm tích hợp.

5

Tôi đã tìm cách làm điều tương tự và tôi đã đến một giải pháp hoạt động thực sự tốt cho mục đích của mình.

này không không giải quyết vấn đề của việc áp dụng một TestCategory trên một cơ sở cho mỗi lớp, nhưng bạn có thể sử dụng các đối số dòng /test: lệnh cho mstest để xác định một chuỗi tìm kiếm để phù hợp với bất kỳ phần nào của đầy đủ đủ điều kiện tên phương pháp của thử nghiệm. Điều đó có nghĩa là bạn thường có thể so khớp với lớp, hoặc không gian tên, hoặc bất kỳ chuỗi tìm kiếm nào bạn có thể đến tại đó sẽ khớp với các bài kiểm tra đích.Và nếu điều đó không làm điều đó, bạn có thể sử dụng đối số /test: nhiều lần. Tức là:

> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace 
    /test:My.FullyQualified.OtherNamespace.OtherClass 

More Info

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