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

我目前正在为一个类工作在Windows Store应用程序(Windows 8),并且我的NUnit测试出现问题.

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

> TheMetroApp.sln

> SQLite-net.csproj – 类库(Windows Store Apps).文件从NuGet中提取.
> DataModel.csproj – 类库(Windows Store Apps)
> UnitTests.csproj – 单元测试库(Windows Store Apps). NUnit框架从NuGet中拉出.
> TheMetroApp.csproj – 从一个Windows SDK示例中提取的项目文件.

>杂项依赖和公用事业

> Windows 8 Pro RTM / Visual Studio 2012 RTM
ReSharper 7
> NUnit 2.6.1
> SQLite(按照说明here设置)

UnitTests依赖于和参考DataModel. DataModel依赖和引用SQLite-net.我添加到UnitTests项目中的唯一一个是包含一些存根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 Test runner(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,微软的单元测试框架等等.如果可以让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,没有运行我的测试用例的问题.

http://stackoverflow.com/questions/12924579/testing-a-windows-8-store-app-with-nunit

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 使用NUnit测试Windows 8商店应用程序