Тестирование приложения для Windows 8 Store с помощью NUnit

В настоящее время я работаю над Windows Store Application (Windows 8) для класса, и у меня возникают проблемы с запуском тестов NUnit.

Настройка моего решения/проекта выглядит следующим образом:

  • TheMetroApp.sln

    • SQLite-net.csproj - Библиотека классов (приложения Windows Store). Файлы извлекаются из NuGet.
    • DataModel.csproj - Библиотека классов (приложения для хранилищ Windows)
    • UnitTests.csproj - Unit Test Библиотека (Приложения Windows Store). Рамка NUnit вытащена из NuGet.
    • TheMetroApp.csproj - файл проекта, извлеченный из одного из примеров Windows SDK.
  • Разное. Зависимости и утилиты

    • RTM RTM/Visual Studio 2012 RTM для Windows 8 Pro
    • ReSharper 7
    • NUnit 2.6.1
    • SQLite (настройка в соответствии с инструкциями здесь)

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 является одним из примеров проектов SDK для Windows 8, но с некоторыми настраиваемыми форматами XAML. У меня нет проблем с этим проектом.

Моя проблема в том, что ни один из бегунов Unit Test, которые я пытался использовать, работает.

Когда я пытаюсь использовать официальный тестировщик NUnit x86 Test (версия 2.6.1), мои тесты не выполняются из-за проблем, связанных с сертификатами (см. здесь):

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

ReSharper NUnit test runner не работает по той же причине. К сожалению, это не похоже на то, что в настоящее время существует обходное решение для этого.

Я также попытался использовать тестовый бегун, встроенный в 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) ==========

Что-то странное, что я заметил, что если я выберу конкретный тест в Test Explorer и скажу ему, чтобы запустить, я получаю несколько другое сообщение об ошибке:

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.

Спасибо!

Ответы

Ответ 1

У меня есть приложение для Windows 7 Phone, у которого была та же проблема, что и у вас. Моим решением было создать отдельный "связанный" проект, который компилирует код с использованием стандартных библиотек .net. У связанного проекта не будет проблем с unit test/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 и не испытываю проблем с моими тестовыми случаями.

Ответ 2

Я просто ударил одно и то же сообщение об ошибке при создании модульных тестов для универсального приложения (W81 + WP81). Единственным решением здесь было прекратить использование NUnit и использовать только MSTest.