2012-10-16 34 views
15

Tôi hiện đang làm việc trên Ứng dụng Windows Store (Windows 8) cho một lớp và tôi gặp sự cố khi chạy thử nghiệm NUnit của mình.Thử nghiệm ứng dụng Windows 8 Store với NUnit

Giải pháp/thiết lập dự án của tôi trông giống như sau:

  • TheMetroApp.sln

    • SQLite-net.csproj - Class Library (Windows Store Apps). Các tệp được lấy từ NuGet.
    • DataModel.csproj - Thư viện lớp (Ứng dụng cửa hàng Windows)
    • UnitTests.csproj - Thư viện kiểm tra đơn vị (Ứng dụng cửa hàng Windows). Khung NUnit được lấy từ NuGet.
    • TheMetroApp.csproj - Tệp dự án được lấy từ một trong các ví dụ về Windows SDK.
  • Misc. Phụ thuộc và tiện ích

    • Windows 8 Pro RTM/Visual Studio 2012 RTM
    • ReSharper 7
    • NUnit 2.6.1
    • SQLite (Thiết lập theo các hướng dẫn here)

UnitTests phụ thuộc vào và tham chiếu DataModel. DataModel phụ thuộc vào và tham chiếu đến SQLite-net. Điều duy nhất tôi đã thêm vào dự án UnitTests là một lớp đơn chứa một số bài kiểm tra đơn vị NUnit. Theo như tôi có thể nói, đây là những thiết lập một cách chính xác:

[TestFixture] 
public class TaskSourceTests 
{ 
    #region Private Class Members 

    private ITaskSource _taskSource; 
    private String _dbPath; 

    #endregion 

    #region Testing Infrastructure 

    [SetUp] 
    public void SetUp() 
    { 
     // This part makes NUnit/ReSharper have problems. 
     _dbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "UnitTestDatabase.sqlite"); 
    } 

    #endregion 

    #region Misc. CRUD stuff 

    [Test] 
    public void CreateTaskTest() 
    { 
     // Save the task. 
     Task task = new Task("Some Task", "lol.", DateTime.Now, false); 
     _taskSource.Save(task); 

     // Confirm that it is in the task db. 
     using(SQLiteConnection db = new SQLiteConnection(_dbPath)) 
     { 
      const String query = "SELECT * FROM Task WHERE Id = ?"; 
      IList<Task> results = db.Query<Task>(query, task.Id); 
      Assert.True(results.Contains(task)); 
     } 
    } 

    // ...and so on [but with stubs that are basically Assert.Fail("")]. 

    #endregion 
} 

TheMetroApp là một trong những dự án mẫu Windows 8 SDK, nhưng với một số hình thức tùy chỉnh XAML ném vào tôi không có bất kỳ vấn đề với dự án này. .

Vấn đề của tôi là không có người chạy thử nghiệm đơn vị nào mà tôi đã cố gắng sử dụng đang hoạt động.

Khi tôi cố gắng sử dụng chính thức NUnit x86 Test Runner (phiên bản 2.6.1), kiểm tra của tôi thất bại do các vấn đề liên quan đến giấy chứng nhận (see here):

UnitTests.TaskSourceTests.CreateTaskTest: 
SetUp : System.InvalidOperationException : The process has no package identity. (Exception from HRESULT: 0x80073D54) 

kiểm tra Á hậu NUnit ReSharper thất bại vì lý do chính xác cùng . Thật không may, nó không giống như hiện đang có một workaround cho điều đó.

Tôi cũng đã thử sử dụng nhân tố thử nghiệm được tích hợp trong Visual Studio 2012 (thông qua NUnit Visual Studio Test Adapter). Khi tôi cố gắng chạy thử nghiệm của tôi sử dụng "Chạy Tất cả", tôi nhận được kết quả như sau:

------ Run test started ------ 
Updating the layout... 

Checking whether required frameworks are installed... 

Registering the application to run from layout... 

Deployment complete. Full package name: "GibberishAndStuff" 

No test is available in C:\Projects\project-name\ProjectName\UnitTests\bin\Debug\UnitTests.dll. Make sure that installed test discoverers & executors, platform & framework version settings are appropriate and try again. 
========== Run test finished: 0 run (0:00:09.4873768) ========== 

Vài điều kỳ lạ tôi đã nhận thấy là nếu tôi chọn một bài kiểm tra cụ thể trong thử nghiệm Explorer và nói với nó để chạy, tôi nhận được thông báo lỗi hơi khác:

Could not find test executor with URI 'executor://nunittestexecutor/'. Make sure that the test executor is installed and supports .net runtime version 4.0.30319.18010. 

Đây là loại khó hiểu vì tôi đã cài đặt bộ điều hợp thử nghiệm NUnit.Tôi không thấy bất cứ điều gì tương tự như vấn đề của tôi trên trang khởi chạy cho bộ điều hợp thử nghiệm.

Tôi không thực sự chắc chắn nơi tôi nên tiến hành từ đây. Nếu điều này không làm việc tôi không nhớ làm lại dự án của tôi để sử dụng xUnit.net, khung kiểm thử đơn vị của Microsoft hay cái gì khác. Nó sẽ là khá tuyệt vời nếu tôi có thể nhận được NUnit làm việc mặc dù.

Cảm ơn!

+0

Đây là một câu hỏi hay. Tôi giả định điều này vì sự không tương thích của mô hình phản chiếu với .NETCore với .NET cổ điển. Cũng không chắc chắn nếu nó có thể tải các ứng dụng .NETCore vào chế độ Windows Desktop. Bài đăng này giải thích sự khác biệt: http://blogs.msdn.com/b/dotnet/archive/2012/08/28/evolving-the-reflection-api.aspx – Robert

Trả lời

2

Tôi có ứng dụng Windows 7 Phone có cùng sự cố mà bạn gặp phải. Giải pháp của tôi là tạo một dự án "liên kết" riêng biệt, biên dịch mã bằng cách sử dụng các thư viện chuẩn .net. Dự án được liên kết sẽ không có vấn đề gì với thử nghiệm đơn vị/NUnit.

Xem sau để biết thêm thông tin:

http://msdn.microsoft.com/en-us/library/ff921109(v=pandp.40).aspx

http://visualstudiogallery.msdn.microsoft.com/5e730577-d11c-4f2e-8e2b-cbb87f76c044/

tôi đã chuyển các ứng dụng Windows 8 và không có vấn đề chạy trường hợp thử nghiệm của tôi.

0

Tôi vừa mới nhấn cùng một thông báo lỗi trong khi tạo kiểm tra đơn vị cho một ứng dụng toàn cầu (W81 + WP81). Giải pháp duy nhất ở đây là ngừng sử dụng NUnit và chỉ sử dụng MSTest.

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