Изучаю тесты в Unity3D
Там два вида тестов - playMode и editMode
Оба говорят сгенерировать папку Tests и в ней писать скрипт для теста.
Содержимое скрипта тоже одинаковое.
using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
namespace Tests
{
public class NewTestScript1
{
// A Test behaves as an ordinary method
[Test]
public void NewTestScript1SimplePasses()
{
// Use the Assert class to test conditions
}
// A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use
// `yield return null;` to skip a frame.
[UnityTest]
public IEnumerator NewTestScript1WithEnumeratorPasses()
{
// Use the Assert class to test conditions.
// Use yield to skip a frame.
yield return null;
}
}
}
Одно но - если в основной папке проекта мы создадим решение, для которого в общем то и писались эти тесты, то в PlayMode ссылка на это решение работает, а в EditMode выдает ошибку
Не удалось найти тип или имя пространства имен TestComposing(возможно, отсутствует директива using или ссылка на сборку)
Код выдающий эту ошибку, такой
[UnityTest]
public IEnumerator NewTestScriptWithEnumeratorPasses()
{
//Именно TestComposing в EditMode оно не находит. Но находит в PlayMode!
TestComposing c = new TestComposing();
var r = c.TestBuilderTestRun();
Debug.Log(r.abilities.First().GetType() + " " + r.money + " ");
yield return null;
}
Обращаемся мы из неймспейса Tests (создан юнити) в глобальный неймспейс. (TestComposing лежит просто без указания неймспейса, просто public class).
Решарпер предлагает сделать ссылку на Assembly, и успешно её делает - но юнити продолжает считать что мы пытаемся взять что то несуществующее, и пишет нам в консоли.
Assets\Scenes\Tests\NewTestScript.cs(25,13): error CS0246: The type or namespace name 'TestComposing' could not be found (are you missing a using directive or an assembly reference?)
После перезагрузки ситуация сохраняется, и ссылки сделанные решарпером, снова пропадают.
Прикладываю скриншот asmdef тестовой папки. Да, видно что там стоит галка Test Assemblies, но если её убрать, то сам Test Runner не видит это как EditMode тест http://prntscr.com/papayx
Нашел решение с помощью подсказок @RiotBr3aker и чтения англоязычного SO. В общем, если пользоваться EditMode тестами, надо для каждой сборки создавать свой Create->AssemblyDefinition
И в тестовом AssemblyDefinition указывать в окне AssemblyDefinitionReferences свою ссылку на AssemblyDefinition в папке с вашими основными скриптами. В случае если у вас несколько папок со скриптами, это скорее всего выльется необходимость везде создавать AssemblyDefinition и указывать референсы. Звучит крайне неудобно, но похоже это единственный способ запускать EditMode тесты по всему проекту.
Ответ от англоязычного SO https://stackoverflow.com/questions/50223866/how-to-set-up-unit-tests-in-unity-and-fix-missing-assembly-reference-error
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо Передать в метод string[], а на выходе получить значение объекта
По этому вопросу было много ответов, только ничего не подходит, поскольку склеивание файла лишает смысла всю программу, и я пишу в файл настройки,...
При попытке отобразить изображение
Есть участок кода где перехватываются клавиши и блокируются: