gpt4 book ai didi

c# - 使用 NUnit 测试 Windows 8 商店应用程序

转载 作者:可可西里 更新时间:2023-11-01 07:48:12 26 4
gpt4 key购买 nike

我目前正在为一个类(class)开发 Windows 应用商店应用程序 (Windows 8),但我在运行 NUnit 测试时遇到了问题。

我的解决方案/项目设置如下所示:

  • TheMetroApp.sln

    • SQLite-net.csproj - 类库(Windows 应用商店应用程序)。文件是从 NuGet 中提取的。
    • DataModel.csproj - 类库(Windows 应用商店应用程序)
    • UnitTests.csproj - 单元测试库(Windows 商店应用程序)。 NUnit 框架是从 NuGet 中提取的。
    • TheMetroApp.csproj - 从 Windows SDK 示例之一提取的项目文件。
  • 杂项。依赖项和实用程序

    • Windows 8 专业版 RTM/Visual Studio 2012 RTM
    • ReSharper 7
    • NUnit 2.6.1
    • SQLite(根据说明设置 here)

单元测试依赖于并引用数据模型。 DataModel 依赖于并引用 SQLite-net。我唯一添加到 UnitTests 项目的是一个包含一些 stub NUnit 单元测试的类。据我所知,这些设置正确:

[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 是 Windows 8 SDK 示例项目之一,但其中包含一些自定义 XAML 表单。我对这个项目没有任何问题。

我的问题是,我尝试使用的单元测试运行程序都无法正常工作。

当我尝试使用官方 NUnit x86 测试运行器(版本 2.6.1)时,我的测试由于证书相关问题而失败 (see here) :

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

ReSharper 的 NUnit 测试运行程序因完全相同的原因而失败。不幸的是,目前似乎没有解决方法。

我还尝试使用 Visual Studio 2012 中内置的测试运行程序(通过 NUnit Visual Studio Test Adapter)。当我尝试使用“全部运行”运行我的测试时,我得到以下输出:

------ 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) ==========

我注意到的一件奇怪的事情是,如果我在测试资源管理器中选择一个特定的测试并告诉它运行,我会得到一个稍微不同的错误消息:

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.

这有点令人费解,因为我安装了 NUnit 测试适配器。我在测试适配器的启动板页面上没有看到与我的问题类似的任何内容。

我不太确定应该从哪里开始。如果这不起作用,我不介意重新设计我的项目以使用 xUnit.net、Microsoft 的单元测试框架或其他东西。不过,如果我能让 NUnit 正常工作,那就太棒了。

谢谢!

最佳答案

我有一个 Windows 7 Phone 应用程序与您有同样的问题。我的解决方案是创建一个单独的“链接”项目,该项目使用标准 .net 库编译代码。链接的项目将没有单元测试/NUnit 的问题。

有关详细信息,请参阅以下内容:

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

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

我已将该应用程序移植到 Windows 8,运行我的测试用例没有任何问题。

关于c# - 使用 NUnit 测试 Windows 8 商店应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com