2012-03-09 11 views
11

Tôi dường như đang gặp sự cố, ứng dụng chúng tôi đang sử dụng sử dụng hạt nhân Ninject và chứa cấu hình cụ thể được thu thập với nội dung của cuộc gọi WCF (tên người dùng, mã thông báo ...).Chạy thử nghiệm đơn vị trong miền ứng dụng khác nhau với NUnit

Dựa trên đó một cấu hình cụ thể mà người dùng được gán quyền trên ứng dụng, điều này được bảo vệ thông qua một cá thể cụ thể trong hạt nhân Ninject.

Chúng ta không thể chỉ định hạt nhân Ninject, những gì chúng ta muốn làm là chạy một vài bài kiểm tra Nunit, nhưng chạy từng phần tử trong một miền ứng dụng riêng biệt (tái tạo hạt nhân mỗi lần với các cài đặt khác nhau).

Tôi chỉ tìm cách chạy toàn bộ các dự án thử nghiệm trong các miền ứng dụng khác nhau nhưng không tìm thấy thử nghiệm trên mỗi thử nghiệm.

Có cách nào để giải quyết vấn đề này không?

Thật không may cấu hình Ninject không thuộc về chúng tôi, chúng tôi phải 'sống' theo cách này.

Trả lời

5

Tôi không nghĩ rằng có một cách để giải quyết nó mà không cần viết lại các phần của mã NUnit. Nó đã được một thời gian kể từ khi tôi đã được bên trong mã NUnit, nhưng tôi khá chắc chắn phần tải miền ứng dụng chính đã không thay đổi.

NUnit thường sử dụng hai miền ứng dụng. Một mặc định được tạo ra khi NUnit được chạy và một riêng biệt để tải các hội đồng kiểm tra và các hội đồng mà họ tham chiếu. Đó là lý do chính để làm điều này là cho phép dỡ các bộ phận kiểm tra. Bạn không thể dỡ bỏ một dll, nhưng bạn có thể dỡ bỏ một appdomain.

Bạn có thể chạy NUnit một lần cho mỗi bài kiểm tra và vượt qua bài kiểm tra trên dòng lệnh, nhưng điều đó thật xấu và tôi không chắc nó sẽ giúp ích gì.

Cũng có thể tận dụng được Action Attributes trong NUnit 2.6, nhưng bạn sẽ thực hiện rất nhiều công việc để thực hiện.

Bạn cũng có thể tạo miền ứng dụng mới trong phương pháp thiết lập của mình và gọi tên miền đó trong mỗi thử nghiệm. Lúng túng nhưng có thể.

Tôi rất tiếc, tôi không có câu trả lời hoàn chỉnh hơn.

1

Tôi không hoàn toàn chắc chắn về câu hỏi của bạn. Tuy nhiên nó có vẻ như bạn cần một số loại thực hiện tùy chỉnh. Bạn có xem xét các thuộc tính thử nghiệm tùy chỉnh không? Sau đó, có thể định cấu hình từng thuộc tính để chạy trong một Miền ứng dụng khác? Tôi chỉ xoay một số ý tưởng, nhưng có thể có cách tốt hơn để làm điều này.

+1

XUnit thực hiện điều này bằng cách mặc định ... –

25

Tôi cần làm điều tương tự, vì vậy tôi đã tạo một thư viện mà về cơ bản thực hiện kiểm tra hiện tại và thực thi lại nó trong một AppDomain mới. Đó là gói gói có tên là NUnit.ApplicationDomain và là open source.

Ví dụ Code:

[Test, RunInApplicationDomain] 
public void Method() 
{ 
    Console.WriteLine("I'm in a different AppDomain") 
}