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

5. Утверждение и ожидание журналов

Цели обучения

Тестирование и проверка кода, записывающегося в журнал консоли.

Введение и мотивация

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

Мы расширили рамки тестирования, чтобы учесть журнал консоли. Это означает, что по умолчанию любая ошибка или исключение, зарегистрированные во время запуска теста, приведут к неудаче теста. Если такие неудачи ожидаются, то можно использовать LogAssert.Expect(logtype, message), чтобы гарантировать, что данное сообщение будет зарегистрировано. Это может быть использовано для ожидаемых обычных сообщений и предупреждений. LogAssert.Expect может быть помещен как до, так и после сообщения. Когда тест выполнен (или в следующий раз, когда он возвращается), он будет неудачным, если ожидаемое сообщение не присутствует.

[Test]
public void LogAssertExample()
{
 // Expect a regular log message
 LogAssert.Expect(LogType.Log, "Log message");

 // The test fails without the following expected log message
 Debug.Log("Log message");

 // An error log
 Debug.LogError("Error message");

 // Without expecting an error log, the test would fail
 LogAssert.Expect(LogType.Error, "Error message");
}

LogAssert.Expect также принимает регулярное выражение в качестве аргумента, так как иногда невозможно знать точную строку. Например, если в сообщении журнала в строке имеется время длительности.

2010 год

В течение образец 5_AssertingLogs существует класс с именем MyLoggingClass.

У класса два метода со следующим поведением:

  • DoSomething(); регистрирует сообщение “Делаю что-то”.

  • DoSomethingElse(); регистрирует ошибку “Произошла ошибка. Код: #”, где # является случайным числом от 0 до 9.

Напишите тесты, которые проверяют вышеуказанное поведение с помощью LogAssert.Expect. Вы можете поэкспериментировать, посмотрев, что происходит, если DoSomethingElse(); вызван без expect и что происходит, если вы ожидаете e.g. сообщение типа warning.

Подсказки

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

Решение

Полное решение упражнения можно найти в примере 5_AssertingLogs_Solution.

Один из возможных способов проведения испытаний заключается в следующем:

[Test]
public void DoSomethingLogsMessage()
{
 var loggingClassUnderTest = new MyLoggingClass();
 
 loggingClassUnderTest.DoSomething();
 
 LogAssert.Expect(LogType.Log, "Doing something");
}

[Test]
public void DoSomethingElseLogsError()
{
 var loggingClassUnderTest = new MyLoggingClass();
 
 loggingClassUnderTest.DoSomethingElse();
 
 LogAssert.Expect(LogType.Error, new Regex("An error happened. Code: \\d"));
}

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

API ссылка для LogAssert