2009-04-13 36 views
9

Tôi đang cố gắng kiểm tra thiết bị một dự án Silverlight 3. Tôi đang sử dụng:Thử nghiệm đơn vị với Moq, Silverlight và NUnit

Khi tôi viết một bài kiểm tra mà không sử dụng Moq, nó hoạt động như mong muốn.

Khi tôi sử dụng Moq bên ngoài thử nghiệm, Moq hoạt động như bình thường. (Tôi chế giễu một giao diện và đã một xác minh trong một handler nút như một bằng chứng.)

Nhưng khi tôi chạy một thử nghiệm đơn vị có sử dụng Moq, tôi luôn luôn có được điều này:

System.IO.FileNotFoundException: Could not load file or assembly 'System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified. 
at Moq.ExpressionExtensions.ToStringFixVisitor..ctor(Expression expression) 
at Moq.Interceptor.AddCall(IProxyCall call, SetupKind kind) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Interceptor.cs: line 104 
at Moq.Mock.<>c__DisplayClassc`2.<Setup>b__b() in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 387 
at Moq.PexProtector.Invoke<T>(Func`1 function) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\PexProtector.cs: line 17 
at Moq.Mock.Setup<T1,TResult>(Mock mock, Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 371 
at Moq.Mock`1.Setup<TResult>(Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.Generic.cs: line 194 
at SilverlightMoq.Test1.TestFirst() in Test1.cs: line 23 

Làm thế nào nó có thể được đã sửa?


Tôi đã xây dựng lại cả hai cụm cho SL 3 với cùng kết quả.

Tôi đã có thể chạy thử nghiệm trên Khung kiểm tra đơn vị Silverlight của Microsoft.

http://code.msdn.microsoft.com/silverlightut/

Đây là trong trình duyệt khuôn khổ bài kiểm tra đó có vẻ là cách tiêu chuẩn để kiểm tra đơn vị SL. Những vấn đề là:

  1. bạn phải chạy tất cả các bài kiểm tra của bạn cùng một lúc
  2. nó là tàn nhẫn chậm.

    (~ 5 chậm hơn lần so với các bài kiểm tra tương tự chạy trong khuôn khổ kiểm tra nunit)

Có ai biết về bất kỳ khuôn khổ kiểm tra SL khác hoặc một cách tốt hơn để chạy thử nghiệm chống lại khuôn khổ này?

Khi tôi cố gắng sử dụng TestDriven.Net 's vs plugin tôi nhận được một lỗi:

System.IO.FileNotFoundException: Không thể tải tập tin hoặc lắp ráp' System, ...

Trả lời

0

Âm thanh như một Silverlight 3 vấn đề. Bạn có thể lấy các nguồn của Moq.Silverlight và NUnitSilverlight và xây dựng chúng trên các chương trình nhị phân của silverlight 3 không? Có vẻ như chúng được xây dựng với SL 2.

4

Tôi đã xây dựng một công cụ để sử dụng với tích hợp liên tục và để tăng tốc TDD Silverlight chung ...

http://www.StatLight.net

Nó bây giờ đã hỗ trợ đầy đủ cho bất kỳ phiên bản của NUnit biên soạn để chạy theo Silverlight.

1

Điều gì làm việc cho tôi là đảm bảo thuộc tính 'Sao chép cục bộ' (trong lưới thuộc tính IDE (F4) của Hệ thống tham chiếu) được đặt thành true.

9

Nhờ những thông tin được cung cấp bởi Lee, và mối liên hệ ông cung cấp (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx) tôi đã có thể để có được kiểm tra Silverlight NUnit của tôi chạy trong Hudson với mã số bảo hiểm! Công cụ tuyệt vời này! Và họ cũng chạy với ReSharper, vì vậy tôi không cảm thấy như tôi đang bị trừng phạt nữa (với sự chậm trễ 20 giây) để thực hiện TDD trong Silverlight.

Vì vậy, tôi đã làm gì chính xác?

  • tôi đã thực hiện một dự án Silverlight Unit Test Khung SL3:

    (http://www.jeff.wilcox.name/2010/05/sl3-utf-bits/)

  • Sau đó, tôi đã thay đổi tất cả tài liệu tham khảo (trừ 'các dự án thử nghiệm của hội Silverlight mscorlib') để 'Sao chép địa phương: True' được nêu chi tiết tại:

    (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx)

  • Các n Tôi đã thêm tham chiếu vào khung Silverlight NUnit 2.5.1 được cung cấp trong blog sau (có các phiên bản khác được cung cấp bởi Jeff Willcox trong blog tôi đề cập bên dưới và Jamie Cansdale trong blog của anh ấy ở trên, nhưng đây là phiên bản mới nhất tôi tìm thấy):

    (http://wesmcclure.tumblr.com/post/152727000)

  • Vậy đó! Sau đó tôi có thể viết bài kiểm tra của tôi, chạy chúng trong ReSharper, và từ Á hậu thử nghiệm NUnit! Plus tôi có thể sử dụng ncover để có được báo cáo bảo hiểm !!!

  • CHỈNH SỬA: Ồ có, và nếu bạn chạy bất kỳ thử nghiệm nào yêu cầu chuỗi giao diện người dùng, bạn sẽ gặp lỗi chủ đề chéo trong ReSharper. Điều này được giải quyết bằng cách thực hiện các thử nghiệm đó trong một cuộc gọi Deployment.Current.Dispatcher.BeginInvoke(...).

  • Sau khi sử dụng đơn vị cho các thử nghiệm của mình, tôi không thể chạy chúng từ giao diện web của khung kiểm tra SL, nhưng đó không phải là quá nhiều vấn đề đối với tôi. Nếu bạn cần phải có được điều này làm việc thì có một cái nhìn tại địa chỉ:

    (http://www.jeff.wilcox.name/2009/01/nunit-and-silverlight/)

  • PS: Tôi cũng tạo ra một dự án NUnit NUnit cho giao diện điều khiển Á hậu để chạy thử nghiệm của tôi từ NUnit console (Do not hãy thử bao gồm các hội đồng kiểm tra không SL của bạn trong cùng một dự án NUnit, nó sẽ không hoạt động vì nó sử dụng một thư viện nunit.framework khác).

Tôi cũng đã cố gắng StatLight (http://statlight.codeplex.com/) để chạy các bài kiểm tra từ giao diện điều khiển, và điều đó làm việc tốt cho tôi, nhưng tôi là một ReSharper và quạt NUnit, vì vậy đó không phải là lựa chọn tốt nhất đối với tôi. Ngoài ra còn có một lỗi lạ với StatLight, nơi nó không tải tài nguyên dự án thử nghiệm của tôi đúng cách dẫn đến một số lỗi kiểm tra.

Tôi hy vọng điều này sẽ giúp ai đó.Tôi đã không nghĩ ra bất kỳ điều gì mới mẻ ở đây, mà chỉ hợp nhất tất cả thông tin mà tôi muốn ai đó tóm tắt cho tôi ở phía trước. Khi tôi nhận được một số thời gian tôi sẽ viết blog về điều này trong việc tạo ra một khung Habanero (http://www.habanerolabs.com) dự án với Silverlight.

Whew. Đó là tất cả mọi người!

+0

cảm ơn rất nhiều người đàn ông –

+0

@MarkWhitfeld có cách nào để hiển thị kết quả trong cửa sổ Test Explorer gốc không? – Jay

+0

Không chắc chắn @ jay, tôi đã không thực hiện một dự án Silverlight trong 4 năm qua. Phần lớn có thể đã thay đổi kể từ đó. –

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