gpt4 book ai didi

java - 我将如何测试我的应用程序中的日志记录? Mockito 新手和测试 - 寻求方向

转载 作者:行者123 更新时间:2023-11-30 07:17:43 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何测试 LoggingRestService 类中编写的方法。我想验证我的(外部)错误方法是否在此记录器中生成正确的日志条目。

private static final Logger LOGGER = LoggerFactory.getLogger(LoggingRestService.class);

@POST
@Path("debug")
@ApiOperation(value = "Writes js error message log. (not secured)")
@ApiResponse(code = 200, message = "Message logged")
public void getUserList(@ApiParam(value = "Js debug message.")
String message) {
ConverterUtils.error(LOGGER, message, null);
}

}

这是ConverterUtils错误方法:

public static void error(Logger logger, String mess, Exception ex) {
Class<?> aClass = logger.getClass();
try {
Method method = aClass.getMethod("error", String.class, Throwable.class);
method.invoke(logger, mess, ex);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
LOGGER.error("get logger error", e);
}
}

我从未使用过mockito,但我对模拟类的概念有些熟悉......但我还是有点困惑。我没有得到太多的测试指导,试图自给自足正在慢慢侵 eclipse 我的信心。非常感谢。

最佳答案

让我检查一下我是否明白您的意思:您想要验证您的 ConverterUtil 类是否正在使用适当的消息和异常调用错误方法。

为了能够做到这一点,您需要确保使用 Logger 的模拟版本调用 ConverterUtils 类。您可以使用模拟(Logger.class)来做到这一点。即使 Logger 是一个类而不是一个接口(interface),这也会起作用,因为 Mockito 可以模拟非最终类。它实际上会为您创建一个子类。

您的测试代码将如下所示:

Logger mockedLogger = mock(Logger.class);
String expectedMessage = "Whatever";
Exception expectedException = new Exception();

// Business method
ConverterUtils.error(mockedLogger, expectedMessage, expectedException);

// Asserts
verify(mockedLogger).error(expectedMessage, expectedException);

在一个侧面节点上:让我困惑的是为什么错误方法不那么简单:

public static void error(Logger logger, String mess, Exception ex) {
logger.error(mess, ex);
}

我真的不明白为什么你需要在这里使用反射层。您确切地知道自己想要什么方法,所以为什么不直接按原样调用该方法。

关于java - 我将如何测试我的应用程序中的日志记录? Mockito 新手和测试 - 寻求方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38110001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com