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