19

Tôi đã đẩy Google Fu của mình đến giới hạn cố gắng tìm thiết lập được đề xuất/ổn định nhất để thực hiện TDD + CI cho các ứng dụng Windows Phone. Có ai đã thành công trong việc làm điều này cho tôi đi đúng hướng không?Kiểm tra đơn vị trạng thái cho Windows Phone

Dưới đây là những gì tôi muốn để có thể làm (nếu có thể): kiểm tra đơn vị

  • Viết cho xem các mô hình và các dịch vụ ứng dụng mà không yêu cầu chức năng điện thoại
  • Execute kiểm tra trực tiếp trong Visual Studio qua Resharper hoặc TD.NET
  • Thực hiện các xét nghiệm đơn vị từ dòng lệnh với XML ra, mà không tung ra các giả lập
  • Tốt được resiliant (như xa như thư viện của bên thứ ba đi) để cập nhật SDK

Vì tôi muốn giữ câu hỏi này như một nguồn lực cho những người khác tìm kiếm những điều tương tự, đây là những gì tôi muốn câu trả lời cần tránh:

  • cổng nguồn mở của dự án là một trong hai không đầy đủ hoặc bị bỏ rơi
  • Các dự án mà chỉ có sẵn dưới dạng đính kèm trên blog của một ai đó

tôi cũng muốn có được nghiệm thu đầy đủ BDD kiểu đi, nhưng that's another issue entirely.

Trả lời

14

Tôi đang thêm câu trả lời này làm Wiki cộng đồng để những người khác có thể sửa đổi nó để cập nhật.

đơn vị kiểm tra

Ý định: Để chạy bọc cách điện (không có chức năng điện thoại), nhanh chóng thực hiện các bài kiểm tra thường từ cả IDE và máy chủ tích hợp liên tục mà không cần giả lập (. Ví dụ như TDD Xem mẫu)

Phương pháp tôi đã thấy được đề xuất trong một số bản trình bày liên quan đến việc tham chiếu các tệp nguồn của bạn trong dự án .NET 4 và chạy các thử nghiệm đối với các dự án đó (tham chiếu các tương đương trên máy tính của các hội đồng). Nếu mã của bạn không sử dụng bất kỳ API nào khác với máy tính để bàn BCL , bạn có thể xử lý việc giữ cho dự án tham chiếu được cập nhật (các tệp mới không được thêm tự động) so với số đó phải đủ.

Nếu không, bạn có thể làm theo các bước dưới đây để thực thi mã tham chiếu hội WP7 trong CLR máy tính để bàn:

  1. Thêm một thử nghiệm Silverlight 4 Class Library (không phải là một Silverlight cho Windows Phone dự án) của bạn giải pháp
  2. Trong thư viện lớp, thiết lập Copy Local cho tất cả các tài liệu tham khảo khung trừ mscorelib (về cơ bản hệ thống. * và Microsoft. *) để true
  3. Thêm một tài liệu tham khảo từ thư viện thử nghiệm này để NUnit.Silverlight.Framework.dllNUnit.Silverlight.Compatibility.dll từ NUnit-Silverlight project
  4. Thêm tham chiếu từ thư viện thử nghiệm vào dự án Windows Phone chính của bạn, bỏ qua cảnh báo phiên bản.
  5. Chạy các bài kiểm tra từ trong IDE sử dụng ReSharper (thử nghiệm) hoặc TestDriven.NET
  6. Chạy các bài kiểm tra từ dòng lệnh bằng cách sử dụng tiêu chuẩn NET 2.0 nunit-console.exe từ latest NUnit release, đi qua trong /framework=v4.0.

(Nhiều cách giải quyết ở trên là bắt buộc vì WP7 sử dụng SL3.Khi Mango được phát hành với thời gian chạy SL4, nó phải là một thiết lập bụi)

Testing Integration

Ý định: Để chạy thử nghiệm còn chạy tương tác với các nguồn lực bên ngoài để mã (như tính năng điện thoại và dịch vụ web) trên giả lập, cả hai theo yêu cầu và trên máy chủ CI

CẬP NHẬT đơn vị kiểm tra các ứng dụng Windows Phone 8 will be official supported in Visual Studio 2012 Update 2, bao gồm VS hội nhập và lệnh hỗ trợ dòng. Những thử nghiệm này chạy trong trình mô phỏng, vì vậy tôi đã đưa nó vào trong Kiểm thử tích hợp.

Điều này hiện không được cổng WP7 của khung kiểm tra Silverlight hỗ trợ (và chỉ được gửi dưới dạng tải xuống từ blog).

Trong thời gian chờ đợi, tôi đã tạo một codeplex project để thêm nhiệm vụ MSBuild khởi chạy trình giả lập và đối chiếu kết quả thành tệp XML. Cài đặt phương pháp đơn giản nhất là thêm wp7-ciNuGet package.

LƯU Ý: Cài đặt WP7 SDK trên Windows Server requires modifying the installer configuration và không được hỗ trợ nhưng hoạt động tốt.

Tiếp nhận/kiểm tra hệ thống

Ý định: Để chạy end-to-end kiểm tra tự động tương tác với giao diện người dùng của điện thoại trên giả lập, cả hai theo yêu cầu hoặc trên máy chủ CI

Expensify của (kém được đặt tên cho SEO) Windows Phone Test Framework hỗ trợ viết kiểm tra tự động hóa giao diện người dùng từ máy chủ lưu trữ bằng cách sử dụng SpecFlow.

+0

Để kiểm tra đơn vị để có được một dự án VS được cấu hình, cách dễ nhất là cài đặt mẫu Silverlight NUnit Project http://www.testdriven.net/downloads/SilverlightNUnitProject.zip và chạy nó như được mô tả tại http: //blog.clauskonrad .net/2011/05/wp7-how-to-unit-test-your-viewmodels.html – Safor

3

Tôi nghĩ rằng vấn đề này là do bạn viết bài kiểm tra của mình như thế nào.

  • Cuối cùng, một số mã sẽ phải chạm vào một số thứ cụ thể của điện thoại. Những người đó nên được cô lập như phụ thuộc và giả mạo. Tôi đã không tìm ra một cách thích hợp để có được các bài kiểm tra đơn vị để thực sự chạy trong điện thoại chính nó. Thật không may, những phụ thuộc đó vẫn chưa được kiểm chứng cho tôi.
  • Sử dụng NUnit cho Silverlight cho phép bạn nhận được xác nhận: http://code.google.com/p/nunit-silverlight/
  • Tôi đã sử dụng Resharper để chạy các kiểm tra đơn vị mà không có vấn đề. Tương tự, bạn có thể sử dụng bảng điều khiển nunit để chạy các kiểm tra và nhận đầu ra XML.
  • Rhino Mocks của Ayende cho Silverlight hoạt động tốt đối với các phụ thuộc giả mạo/nhổ.
  • Tích hợp liên tục hơi phức tạp một chút. WP7 SDK không có sẵn trên nền tảng máy chủ, vì vậy tôi đã xây dựng một phiên bản mới trên Windows 7 cho CI của tôi. Có thể có những cách xung quanh giới hạn đó, nhưng tôi không bận tâm.

Công cụ khác bạn sẽ muốn là MVVMLight. Điều này sẽ cho phép bạn sử dụng EventTrigger và ICommand thay vì các sự kiện, vì việc kiểm tra các sự kiện là công việc đáng kể hơn và không thể bị ràng buộc thông qua DataContext.

Như xa như thế nào tôi thiết kế ứng dụng của tôi:

ViewModel có thể mất trong bất kỳ số lượng phụ thuộc, mà có được giải quyết bằng MicroIoC.

Mã thực tế đằng sau XAML đã giải quyết ViewModel và đặt nó vào ngữ cảnh dữ liệu.Đây là bất hạnh vì đó có nghĩa là bạn không thể đặt DataContext trong XAML, nhưng là một thương mại giảm Tôi đã sẵn sàng chấp nhận cho dependency injection, như thế này:

public partial class SignUpPage 
{ 
    public SignUpPage() 
    { 
     InitializeComponent(); 
     DataContext = IoC.Resolve<SignUpViewModel>(); 
    } 
} 

May mắn thay, đó là mã # C duy nhất mà thực sự xuất hiện trong mã XAML của tôi phía sau. Từ đó, nó là MVVM khá thường xuyên với việc sử dụng binding và DataContext.

Bây giờ bạn có thể kiểm tra ViewModel của bạn, tiêm phụ thuộc cần thiết (hoặc giả mạo chúng ra) và nó sẽ chạy tốt mà không có trong giả lập, miễn là bạn không cố gắng sử dụng một cái gì đó WP7 cụ thể.

+0

Bạn đang sử dụng phiên bản console nunit nào? Ngoài ra, loại dự án nào là dự án thử nghiệm đơn vị của bạn? Nỗ lực của tôi để sử dụng giao diện điều khiển nunit đã dẫn đến lỗi tải lắp ráp. –

+0

FYI, tôi đã sử dụng ViewModels/IoC (mặc dù tôi đang sử dụng Funq) –

2

Dưới đây là một liên kết đến một ai đó mà đã quản lý để tự động kiểm tra WP7 trên 'điện thoại, để tự động triển khai ứng dụng, kiểm tra chạy, và đọc kết quả: http://justinangel.net/WindowsPhone7EmulatorAutomation

Nó làm cho việc sử dụng CoreCon API, mà trông cực kỳ thú vị cho đến khi tôi bắt đầu chơi với nó, và phát hiện ra rằng hầu hết các chức năng đều ném các ngoại lệ không được triển khai - nhưng có đủ để chạy các kiểm thử tự động.

+0

Cảm ơn bạn đã liên kết Damian, nhưng bài đăng trên blog của Justin chỉ bao gồm việc tự động cài đặt ứng dụng. Ngoài ra tôi đang cố gắng để tránh chạy mã trên điện thoại cả. –

1

Vâng, có ít nhất 3 cách khác nhau để làm TDD cho các ứng dụng Windows Phone.

  1. Đơn vị kiểm tra đơn vị Silverlight - được viết bởi Jeff Wilcox. Ở đây bạn có thể tìm thấy số latest update của nó.Có vẻ như đó là cách phổ biến nhất, có rất nhiều thông tin về phương pháp này:

    Ngoài ra hãy kiểm tra Visual Studio test project template để bạn không cần phải tạo ra dự án thử nghiệm bằng tay. Tuy nhiên, giải pháp này đòi hỏi phải chạy thử nghiệm của bạn trên giả lập điện thoại đôi khi có thể rất khó chịu.

  2. Công cụ thư viện di động - bổ trợ Visual Studio mới cho phép bạn tạo C# và thư viện Visual Basic chạy trên nhiều nền tảng dựa trên .NET mà không cần biên dịch lại, kể cả Windows Phone.

    Check this post để xem cách thực hiện TDD cho Windows Phone bằng Công cụ thư viện di động. Tại đây, bạn có thể tìm thấy Visual Studio extension.

    Hạn chế của phương pháp này là thư viện này có hỗ trợ hội đồng hạn chế, do đó hầu hết bạn không thể sử dụng mọi thứ bạn đã từng làm. Ví dụ bạn không thể sử dụng lệnh (kể từ khi ICommand sống trong PresentationCore.dll), bạn cũng không thể sử dụng MVVMLight,… Mặt khác, nó cho phép bạn linh hoạt hơn trong dự án thử nghiệm của mình (bạn có thể sử dụng các khuôn mẫu giả khác nhau. kiểm tra từ VS, chạy thử nghiệm với Resharper và vv).

  3. Dự án Silverlight NUnit Mẫu VS. Kiểm tra this blog post để xem cách sử dụng mẫu này trong dự án của bạn. Ngoài ra kiểm tra các màn hình hiển thị quảng cáo Toran Billups xuất hiện trong chủ đề này. Hãy lưu ý rằng bạn có thể gặp vấn đề khi sử dụng Silverlight NUnit Project với một số khung công tác hoặc chương trình khác như Moq hoặc Resharper.
+0

Hiện tại, có một cách thứ tư cho VS2012, xem câu trả lời của tôi trên http: // stackoverflow.com/a/13035195/95309 –

2

Cập nhật: Kiểm tra đơn vị cho Windows Phone 8 hiện được hỗ trợ chính thức.

http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx

+0

Và tiếc là vẫn không được hỗ trợ trên WP7: ( –

+0

Những gì tôi đã làm là tạo một dự án WP8 với các tệp được liên kết đến các tệp trong dự án WP7 của tôi. và tôi có thể thực hiện nó từ dòng lệnh cho máy chủ CI của tôi. –