测试我的 json 数据解析器应该 return 记录器
Test my json data parser should return a logger
让我们看看我的 json 字符串结构。
所以有7个logger,展开节点查看详情
{
"root_logger" : "MyFailoverLogger",
"loggers": [
{
"logger_name": "MyFileLogger",
"logger_type": "MyCompany.Loggers.FileSystemLogger",
"layout": "${message}|${exception}",
"stack_trace": {
"error": true,
"fatal": false
},
"file_path_pattern" : "\\corporate.MyCompany.com\data\recordings\logs\YYYY\MM\DD",
"file_name_pattern" : "app.{MMDDhhmm}.log",
"rollover_after_n_hours" : 5,
"rollover_after_n_megabytes": 5,
"level" : {
"min_level" : "INFO",
"max_level" : "DEBUG"
}
},
{
"logger_name" : "MyDbLogger",
"logger_type" : "MyCompany.Loggers.DatabaseLogger",
"connection_string" : "",
"target_table" : "",
"command_timeout_milliseconds" : 100,
"layout" : "${message}",
"level" : {
"min_level" : "INFO",
"max_level" : "DEBUG"
}
},
我不确定如何测试它,但我在这里有主要代码。
[Theory]
[InlineData("MyFileLogger")]
[InlineData("MyDbLogger")]
[InlineData("MyDbLogger2")]
[InlineData("MyConsoleLogger")]
[InlineData("MyNullLogger")]
[InlineData("MyMultiplexingLogger")]
[InlineData("MyFailoverLogger")]
public void JSONConfigurationFileParser_Should_Return_A_Logger_Given_A_Name(string expextedLoggerName)
{
// ARRANGE
var currentFilePath = Environment.CurrentDirectory + @"\MyCompanyConfiguration.json";
var jsonString = File.ReadAllText(currentFilePath);
var jsonConfigurationFileParser = new JSONConfigurationFileParser(jsonString);
// ACT
var actualLoggers = jsonConfigurationFileParser.DeserializeLogger();// It is a collection.
// ASSERT
}
actualLoggers
return 所有 7 个记录器。我的问题是我不确定如何正确测试它。我应该使用 InlineData
还是其他?我现在将断言部分留空。对了,用Moq就可以了
因为 InlineData 参数将为每个属性调用一次测试。您只需要在反序列化对象中添加搜索以找到您期望看到的特定节点。
因为你没有显示你的反序列化格式是什么,我就在例子中猜测。
[Theory]
[InlineData("MyFileLogger")]
[InlineData("MyDbLogger")]
[InlineData("MyDbLogger2")]
[InlineData("MyConsoleLogger")]
[InlineData("MyNullLogger")]
[InlineData("MyMultiplexingLogger")]
[InlineData("MyFailoverLogger")]
public void JSONConfigurationFileParser_Should_Return_A_Logger_Given_A_Name(string expectedLoggerName)
{
// ARRANGE
var currentFilePath = Environment.CurrentDirectory + @"\MyCompanyConfiguration.json";
var jsonString = File.ReadAllText(currentFilePath);
var jsonConfigurationFileParser = new JSONConfigurationFileParser(jsonString);
// ACT
var actualLoggers = jsonConfigurationFileParser.DeserializeLogger();
// ASSERT
Assert.True(actualLoggers.Any(x=> x.Name == expectedLoggerName));
}
此时您需要确定这是否是测试解析器的通用测试,在这种情况下,向解析器抛出一些不同的配置文件并为这些场景编写特定测试(即格式错误的文件,单个记录器、多个记录器等)这些测试应该证明解析器工作正常。
一个像您这样的特定测试用例来显示每个记录器都已被解析,再加上一个没有 InlineData 参数的额外测试以显示正确的总节点数被解析会很好。
让我们看看我的 json 字符串结构。
所以有7个logger,展开节点查看详情
{
"root_logger" : "MyFailoverLogger",
"loggers": [
{
"logger_name": "MyFileLogger",
"logger_type": "MyCompany.Loggers.FileSystemLogger",
"layout": "${message}|${exception}",
"stack_trace": {
"error": true,
"fatal": false
},
"file_path_pattern" : "\\corporate.MyCompany.com\data\recordings\logs\YYYY\MM\DD",
"file_name_pattern" : "app.{MMDDhhmm}.log",
"rollover_after_n_hours" : 5,
"rollover_after_n_megabytes": 5,
"level" : {
"min_level" : "INFO",
"max_level" : "DEBUG"
}
},
{
"logger_name" : "MyDbLogger",
"logger_type" : "MyCompany.Loggers.DatabaseLogger",
"connection_string" : "",
"target_table" : "",
"command_timeout_milliseconds" : 100,
"layout" : "${message}",
"level" : {
"min_level" : "INFO",
"max_level" : "DEBUG"
}
},
我不确定如何测试它,但我在这里有主要代码。
[Theory]
[InlineData("MyFileLogger")]
[InlineData("MyDbLogger")]
[InlineData("MyDbLogger2")]
[InlineData("MyConsoleLogger")]
[InlineData("MyNullLogger")]
[InlineData("MyMultiplexingLogger")]
[InlineData("MyFailoverLogger")]
public void JSONConfigurationFileParser_Should_Return_A_Logger_Given_A_Name(string expextedLoggerName)
{
// ARRANGE
var currentFilePath = Environment.CurrentDirectory + @"\MyCompanyConfiguration.json";
var jsonString = File.ReadAllText(currentFilePath);
var jsonConfigurationFileParser = new JSONConfigurationFileParser(jsonString);
// ACT
var actualLoggers = jsonConfigurationFileParser.DeserializeLogger();// It is a collection.
// ASSERT
}
actualLoggers
return 所有 7 个记录器。我的问题是我不确定如何正确测试它。我应该使用 InlineData
还是其他?我现在将断言部分留空。对了,用Moq就可以了
因为 InlineData 参数将为每个属性调用一次测试。您只需要在反序列化对象中添加搜索以找到您期望看到的特定节点。
因为你没有显示你的反序列化格式是什么,我就在例子中猜测。
[Theory]
[InlineData("MyFileLogger")]
[InlineData("MyDbLogger")]
[InlineData("MyDbLogger2")]
[InlineData("MyConsoleLogger")]
[InlineData("MyNullLogger")]
[InlineData("MyMultiplexingLogger")]
[InlineData("MyFailoverLogger")]
public void JSONConfigurationFileParser_Should_Return_A_Logger_Given_A_Name(string expectedLoggerName)
{
// ARRANGE
var currentFilePath = Environment.CurrentDirectory + @"\MyCompanyConfiguration.json";
var jsonString = File.ReadAllText(currentFilePath);
var jsonConfigurationFileParser = new JSONConfigurationFileParser(jsonString);
// ACT
var actualLoggers = jsonConfigurationFileParser.DeserializeLogger();
// ASSERT
Assert.True(actualLoggers.Any(x=> x.Name == expectedLoggerName));
}
此时您需要确定这是否是测试解析器的通用测试,在这种情况下,向解析器抛出一些不同的配置文件并为这些场景编写特定测试(即格式错误的文件,单个记录器、多个记录器等)这些测试应该证明解析器工作正常。
一个像您这样的特定测试用例来显示每个记录器都已被解析,再加上一个没有 InlineData 参数的额外测试以显示正确的总节点数被解析会很好。