Настройка и очистка во время сборки
Иногда может потребоваться внести изменения в 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 очистка запускается только после завершения соответствующих тестов.