Unity 6.3
0 онлайн 20 гостей 3 в системе
Вход

Настройка и очистка во время сборки

Иногда может потребоваться внести изменения в Unity или файловую систему до сборки тестов, а затем очистить эти изменения после тестового запуска. Вы можете включить этапы установки до сборки и очистки после сборки в свои тесты одним из следующих способов:

  • Осуществление IPrebuildSetup и IPostBuildCleanup интерфейсы в тестовом классе.
  • Применить [PrebuildSetup] и [PostBuildCleanup] атрибуты к вашему тестовому классу, к отдельному тесту или к тестовой сборке и передайте в качестве аргумента класс, реализующий соответствующий интерфейс. Например, пометьте тестовый метод атрибутом [PrebuildSetup("MyTestSceneSetup")] чтобы выполнить предварительную подготовку сборки, описанную в классе MyTestSceneSetup которая осуществляет IPrebuildSetup.

Оба PrebuildSetup и PostBuildCleanup атрибуты выполняются, если тест или тестовый класс, к которому они применены, входит в текущий прогон тестов. Тест входит в прогон, когда вы запускаете все тесты или задаёте фильтр Если несколько тестов ссылаются на одну и ту же настройку до сборки или очистку после сборки, то он запускается только один раз.

Следующий пример реализует IPrebuildSetup к тестовому классу, чтобы описать работу, выполняемую перед построением тестов:

[TestFixture]
public class CreateSpriteTest : IPrebuildSetup
{
    Texture2D m_Texture;
    Sprite m_Sprite;
    
    public void Setup()
    {

#if UNITY_EDITOR

        var spritePath = "Assets/Resources/Circle.png";

        var ti = UnityEditor.AssetImporter.GetAtPath(spritePath) as UnityEditor.TextureImporter;

        ti.textureCompression = UnityEditor.TextureImporterCompression.Uncompressed;

        ti.SaveAndReimport();

#endif
    }

    [SetUp]
    public void SetUpTest()
    {
        m_Texture = Resources.Load<Texture2D>("Circle");
    }

    [Test]
    public void WhenNullTextureIsPassed_CreateShouldReturnNullSprite()
    {

        // Check with Valid Texture.

        LogAssert.Expect(LogType.Log, "Circle Sprite Created");

        Sprite.Create(m_Texture, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f));

        Debug.Log("Circle Sprite Created");

        // Check with NULL Texture. Should return NULL Sprite.

        m_Sprite = Sprite.Create(null, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f));

        Assert.That(m_Sprite, Is.Null, "Sprite created with null texture should be null");

    }
}

Примечание: Использование #if UNITY_EDITOR если вы хотите получить доступ только к редактору APIs, но настройка/очистка находится внутри Режим игры сборка.

Настройка и очистка с тестовыми данными

Интерфейсы IPrebuildSetupWithTestData и IPostBuildCleanupWithTestData можно использовать для определения методов установки и очистки, имеющих доступ к Test Data. Данные теста содержат информацию о тестах, которые будут выполнены или только что были выполнены.

Соответствующие атрибуты также существуют, и применяются те же правила и схемы, которые указаны выше.

Ордер на исполнение

Все подготовительные шаги выполняются в детерминированном порядке, один за другим. Сначала выполняются шаги, заданные атрибутами. Затем — каждый тестовый класс, реализующий интерфейс, в алфавитном порядке внутри своего пространства имён, то есть в том же порядке, в каком выполняются тесты.

Настройки, которые предоставляют объект TestData, будут выполняться в вышеуказанном порядке перед всеми Настройками, которые не предоставляют данные. То же самое относится и к Очисткам.

В сборке Player очистка запускается сразу после теста. В сборке Unity Editor очистка запускается только после завершения соответствующих тестов.

Дополнительные ресурсы