Как настроить модульные тесты в Unity и исправить ошибку отсутствующей ссылки на сборку? - PullRequest
0 голосов
/ 08 мая 2018

Я создал следующую структуру:

├── Assets
├── Scenes
├── Scripts
│   └── MyExample.cs
├── Tests
│   ├── MyExampleTest.cs
│   └── Tests.asmdef

Теперь, когда я нажимаю Run All, в окне Test Runner в Unity появляется следующая ошибка:

The type or namespace name `MyExample' could not be found. Are you missing an assembly reference?

В Visual Studio у меня есть два проекта:

  • Assembly-CSharp (содержит src)

  • Тесты (содержащие тесты)

Я добавил Assembly-CSharp в качестве ссылки во втором проекте. Visual Studio может построить решение без ошибок.

Кто-нибудь знает, как правильно настроить регрессию UnitTest для проекта Unity?

Это Tests.asmdef

{
    "name": "Tests",
    "optionalUnityReferences": [
        "TestAssemblies"
    ]
}

MyExampleTest.cs

using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using abc;

public class MyExampleTest{

    [Test]
    public void NewTestScriptSimplePasses() {
        // Use the Assert class to test conditions.
    }

    [UnityTest]
    public IEnumerator NewTestScriptWithEnumeratorPasses() {
        abc.Example m;
        Assert.That(false);
        yield return null;
    }
}

MyExample.cs

namespace abc
{
    public class Example
    {


    }
}

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Наконец-то нашел правильное решение для этого. И все это делается через редактор.

Итак, наша цель - сделать так, чтобы тестовая сборка ссылалась на сборку реального кода. Для этого вам нужно определить обе сборки, а затем установить эталон в единицу.

  1. Создайте свои тесты как обычно изнутри Unity. С генерацией сборки.
  2. Перейдите в папку сценариев (обычно «Активы / Сценарии») и щелкните правой кнопкой мыши -> Создать определение сборки , это также создаст файл сборки там.
  3. Перейдите к информации о тестовой сборке в Unity и добавьте ссылку к вашей реальной сборке, а также убедитесь, что она помечена только для платформы Editor .

Вы настроены. Ваши тесты должны быть видимыми и запускаемыми в Unity, и они могут ссылаться на любой другой скрипт.


Имейте в виду, что вы можете безопасно удалить ВСЕ файлы .csproj и .sln в корневой папке, и Unity создаст их заново (также они не должны находиться под контролем исходного кода).

Итак, ваш тест для таких изменений всегда должен быть

  1. Удалить любой файл, связанный с Visual Studio, в папке.
  2. Выберите Активы -> Открыть проект C # . Пусть это сделает свое дело.
  3. Если все компилируется и запускается, и ваши тесты так же хорошо это делают, вы все правильно настроили.

Бонус: у нас также есть пара отладочных проектов в нашем проекте, которые находятся в Assets / DebugScenes / DebugScripts . Создав для них отдельную сборку и указав в ней ссылку на реальную сборку сценариев (при необходимости) и пометив ее как платформу Editor , мы гарантируем, что эти сценарии никогда не будут включены в нашу сборку без каких-либо дополнительных шагов во время сборки.


Дополнительное чтение. Вы можете подумать, что не хотите создавать сборку для ВСЕХ ваших скриптов, поскольку вы хотите протестировать только некоторые из них. И это правда, что вы можете создать сборку для подпапки, но у вас возникнут проблемы, так как тогда вам придется создавать ссылку из одной реальной сборки сценариев в другую. Поэтому убедитесь, что все хорошо, аккуратно и имеет смысл ...


Our test and real script assembly infos side-by-side. Game Title has Planetary in it

0 голосов
/ 08 мая 2018

Попробуйте использовать встроенный пользовательский интерфейс Test Runner для настройки папки сборки Test и первого сценария тестирования.

Используйте Window -> Test Runner -> EditMode -> "Create Test Assembly Folder", и, как только вы перейдете в новую папку Test Assembly, используйте кнопку Create Test Script in current folder.

В частности, в вашем Tests.asmdef отсутствует «Редактор», включенный по сравнению с настройкой по умолчанию (в Unity 2018.1).

{
    "name": "Tests",
    "optionalUnityReferences": [
        "TestAssemblies"
    ],
    "includePlatforms": [
        "Editor"
    ]
}

Вам не нужно ничего делать вручную в проекте Visual Studio для настройки ваших тестов.

Обратите внимание, что когда мой файл сборки установлен на «Любая платформа», как показано ниже (как в вашем вопросе):

{
    "name": "Tests",
    "optionalUnityReferences": [
        "TestAssemblies"
    ]
}

Мои тесты не отображаются в окне Test Runner.

Когда в моем файле сборки явно указана поддержка только платформы «Редактор» (в соответствии с моим предыдущим примером), мои тесты правильно отображаются в окне «Выполнитель тестов».

(Такое поведение мне кажется немного нелогичным.)


Вам также необходимо настроить определение сборки для ваших сценариев. В папке Scripts создайте файл определения сборки MyScriptAssembly.asmdef (используя меню Unity Assets -> Create -> Assembly Definition или вручную):

{
    "name": "MyScriptAssembly"
}

Затем убедитесь, что ваш Tests.asmdef ссылается на ваш скрипт.

{
    "name": "Tests",
    "references": [
        "MyScriptAssembly"
    ],
    "optionalUnityReferences": [
        "TestAssemblies"
    ],
    "includePlatforms": [
        "Editor"
    ],
    "excludePlatforms": [],
    "allowUnsafeCode": false
}

Вы также можете настроить это в окне инспектора Unity Editor. См. «Ссылки» в Инспекторе при выборе файла .asmdef:

assembly definition inspector window

(Подробнее см. Документация Unity по файлам определений сборки )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...