2010-05-03 22 views
8

Khi tôi chạy Bài kiểm tra Đơn vị, tất cả các bài kiểm tra đều vượt qua, nhưng thay vì "Chạy thử thành công" hoặc bất kỳ thông báo thành công nào, tôi nhận được "Lỗi chạy thử" trong thanh nhỏ cho tôi biết bao nhiêu bài kiểm tra của tôi đã vượt qua, mặc dù tất cả các bài kiểm tra của tôi đã trôi qua.Kiểm tra lỗi chạy với MSTest trong VS2010

Khi tôi nhấp vào văn bản, tôi được đưa đến một trang đó nói với tôi hai điều sau đây xảy ra:

Warning: conflict during test run deployment: deployment item '[...]\Booking.Web.dll' directly or indirectly referenced by the test container [...]\Booking.Web.Tests.dll cannot be deployed to 'Booking.Web.dll' because otherwise the file '[...]\Booking.Web.dll' would override deployment item '[...]\Booking.Web.dll' directly or indirectly referenced by '[...]\Booking.Web.Tests.dll'

Error: Cannot initialize the ASP.NET project 'Booking.Web' Exception was thrown: The website could not be configured correctly; getting ASP.NET proccess information failed. Requesting ' http://localhost:54131/VSEnterpriseHelper.axd ' returned an error: The remote server returned an error: (500) Internal Server Error.

Tôi không hiểu một nửa của những gì nó đang phàn nàn về. Làm thế nào để loại bỏ các lỗi này?

(Và để tham khảo: Booking.Web là một dự án ASP.NET MVC 2, Booking.Web.Tests là một dự án thử nghiệm, [...] là đường dẫn đầy đủ địa phương cho các dự án trong môi trường của tôi, trong hầu hết của các trường hợp ở trên vào thư mục/bin/debug/bên trong dự án Booking.Web)

Cập nhật: Theo hướng dẫn, tôi tìm kiếm thêm thông tin trong Trình xem sự kiện. Dưới đây là những gì tôi đã tìm thấy:

3008 A configuration error has occurred.
5/8/2010 2:26:15 AM
5/8/2010 12:26:15 AM
4ffbe9180c3d4c02adb9ac4d61dd0928
1
1
0
4484bbf4-1-129177519750954331
Full
/
D:\...\Booking.Web\
AASLOEG

1876
WebDev.WebServer40.EXE
Aasloeg\Tomas
ConfigurationErrorsException
Could not load file or assembly 'Ninject.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=79764a4ef1548af1' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045) at
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) at
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() at
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) at
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) at
...stack trace in absurdum.

+0

Tham khảo một dự án ASP.NET trong một thử nghiệm đơn vị là hầu như luôn luôn một ý tưởng tồi. –

+0

OK ... Vậy làm thế nào tôi nên refactor để có được ra khỏi điều này? –

+5

Refferencing ASP.NET MVC project trong một unit test là một thực tế phổ biến. Nếu không thì làm thế nào bạn sẽ kiểm tra hành động của bộ điều khiển? –

Trả lời

9

Trước hết - bạn đã bật Bảo hiểm mã. Bạn có thể đọc here về nó. Vì vậy, không có vấn đề với bài kiểm tra đơn vị. Đây là vấn đề bảo hiểm mã.

Điều thứ hai - cảnh báo này là ok - đừng bận tâm về điều đó.

Điều thứ ba - lỗi này - đây là vấn đề chính.

Có thể có các vấn đề khác nhau - phổ biến nhất là bạn nên refference nhiều hội đồng. Để tìm hiểu chính xác những gì cần được tải, bạn phải truy cập vào Event Viewer và xem tại Windows Logs-> Application

+0

Vì vậy, nó đã hoạt động? –

+0

Tôi tìm thấy một lỗi với Ninject.Web.Mvc (mà tôi đã tải xuống nguồn và được xây dựng dựa trên Ninject 2 và ASP.NET MVC 2 dlls bản thân mình ...) nhưng tôi đã không thể thoát khỏi lỗi, vì Tôi không thể tìm ra lý do tại sao tải dll không hoạt động đúng.Tôi sẽ cập nhật bài đăng của mình với thông tin tôi tìm thấy trong Trình xem sự kiện. Ngoài ra, như bạn nói tôi đã bật mã vùng phủ sóng - nhưng phần nào trong số này bạn đang nói là bị ảnh hưởng bởi điều đó? –

+0

Vâng, bạn có thể tắt phạm vi mã. Nhưng nếu bạn cần nó, bạn nên hiểu tại sao vấn đề này lại xảy ra. Thực tế nếu bạn đã xây dựng chúng một mình bạn đã ký chúng? 'Ninject.Web.Mvc, Phiên bản = 2.0.0.0, Văn hóa = trung lập, PublicKeyToken = 79764a4ef1548af1 - có nghĩa là nó tìm kiếm hội đồng đã ký. Tôi hiểu - điều này có vẻ thực sự lạ rằng bạn có thể chạy trang web nhưng mã bảo hiểm vì lý do nào đó không ai có thể hiểu đòi hỏi phải có nhiều hội đồng hơn để được đưa vào ứng dụng. –

4

Tôi đã gặp lỗi tương tự như MS-Test phàn nàn rằng DLL có thể "ghi đè mục triển khai blah.dll".

này đã xảy ra bởi vì tôi đã chạy MS-Test cho nhiều DLL của cùng một lúc như vậy:

mstest.exe /testcontainer:Tests.web.dll /testcontainer:Tests.svcs.dll /testcontainer:Tests.core.dll 

Khi MS-Test đã chạy này, nó đã cố gắng để thực hiện tất cả các đầu ra DLL từ các bài kiểm tra và địa điểm chúng trong số /Out thư mục chạy thử nghiệm. Trong trường hợp của tôi, Tests.svcs.dllTests.core.dll cả tham chiếu cùng một assembly (Core.dll) và do đó nó cố gắng bắt chước mà DLL với cùng chỗ hai lần (do đó gây ra cảnh báo).

Để giải quyết điều này, tôi tách ra các thử nghiệm chạy cho từng lắp ráp đã mang đến cho mỗi lần chạy thử nghiệm riêng của nó /Out thư mục cho đầu ra của DLL

mstest.exe /testcontainer:Tests.web.dll 

mstest.exe /testcontainer:Tests.svcs.dll 

mstest.exe /testcontainer:Tests.core.dll 
+0

Không phải lúc nào cũng có thể làm như vậy. Trong trường hợp của tôi, tôi đang chạy thử nghiệm trong máy chủ CI và tôi phải chạy tất cả chúng lại với nhau để tạo ra một tệp kết quả duy nhất –

+0

Bạn đang sử dụng CI nào? Tôi chạy tất cả các bài kiểm tra của mình ở Hudson/Jenkins và plugin chúng tôi sử dụng để hiển thị kết quả có thể hợp nhất nhiều tệp kết quả. Chúng tôi chỉ cung cấp cho nó một ký tự đại diện như sau: /TestResults/*.trx –

+0

Tôi đang sử dụng Jenkins. Bạn sử dụng plugin nào để xử lý kết quả trx? –

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