包含此页的版本:
不含此页的版本:
如何测试和验证写入控制台日志的代码。
在 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也将正则表达式作为参数,因为有时不可能知道精确的字符串。例如,如果记录的消息在字符串中具有持续时间。
在示例中 5_AssertingLogs有一个叫做MyLoggingClass.
该类有两个方法,具有以下行为:
DoSomething();记录消息“正在做某事”。
DoSomethingElse();记录错误“发生错误。代码:#“,其中 # 是 0 到 9 之间的随机数。
编写测试来验证上述行为,使用LogAssert.Expect.您可以通过看看如果DoSomethingElse();在没有期望的情况下调用,如果您期望会发生什么,例如警告类型的消息。
LogAssert.Expect以预期错误消息。可以在示例中找到练习的完整解决方案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"));
}