You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

256 lines
8.7 KiB
C#

2 years ago
using NetEscapades.Configuration.Yaml;
using YamlDotNet.Core;
using YamlDotNet.Helpers;
using YamlDotNet.RepresentationModel;
using YamlDotNet.Serialization;
namespace OptionStudy.UnitApp
{
/// <summary>
/// 从文件中读取配置
/// </summary>
public class LoadConfigFileTest : IDisposable
{
private readonly ITestOutputHelper? testOutput;
public LoadConfigFileTest(ITestOutputHelperAccessor helperAccessor)
{
testOutput = helperAccessor.Output;
}
/// <summary>
/// 读取Json配置文件
/// </summary>
[Fact]
public void ReadJsonFile_Test()
{
var config = new ConfigurationBuilder()
.AddJsonFile("Configs/appsettings.json", true, true)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("JsonAppNmae", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("json@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("json", appOption.EMail.Recipient);
testOutput?.WriteLine("从 json 文件中读取配置文件!");
}
/// <summary>
/// 读取Json配置流
/// </summary>
[Fact]
public void ReadJsonStreamFile_Test()
{
var configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.json");
var fileStream = File.OpenRead(configFilePath);
var config = new ConfigurationBuilder()
.AddJsonStream(fileStream)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("JsonAppNmae", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("json@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("json", appOption.EMail.Recipient);
testOutput?.WriteLine("从 json 文件中读取配置文件!");
}
/// <summary>
/// 读取xml配置文件
/// </summary>
[Fact]
public void ReadXmlFile_Test()
{
var config = new ConfigurationBuilder()
.AddXmlFile("Configs/appsettings.xml", true, true)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("XmlAppName", appOption.AppName);
Assert.Equal("1.2.3.4", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("xml@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("xml", appOption.EMail.Recipient);
testOutput?.WriteLine("从 xml 文件中读取配置文件!");
}
/// <summary>
/// 读取xml配置流
/// </summary>
[Fact]
public void ReadXmlStreamFile_Test()
{
var configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.xml");
var fileStream = File.OpenRead(configFilePath);
var config = new ConfigurationBuilder()
.AddXmlStream(fileStream)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("XmlAppName", appOption.AppName);
Assert.Equal("1.2.3.4", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("xml@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("xml", appOption.EMail.Recipient);
testOutput?.WriteLine("从 xml 文件中读取配置文件!");
}
/// <summary>
/// 读取ini配置文件
/// </summary>
[Fact]
public void ReadIniFile_Test()
{
var config = new ConfigurationBuilder()
.AddIniFile("Configs/appsettings.ini", true, true)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("IniAppName", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("ini@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("ini", appOption.EMail.Recipient);
testOutput?.WriteLine("从 ini 文件中读取配置文件!");
}
/// <summary>
/// 读取ini配置流
/// </summary>
[Fact]
public void ReadIniStreamFile_Test()
{
var configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.ini");
var fileStream = File.OpenRead(configFilePath);
var config = new ConfigurationBuilder()
.AddIniStream(fileStream)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("IniAppName", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("ini@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("ini", appOption.EMail.Recipient);
testOutput?.WriteLine("从 ini 文件中读取配置文件!");
}
/// <summary>
/// 读取Yaml配置文件
/// 注意:需引用第三方包(微软没有开发) NetEscapades.Configuration.Yaml
/// </summary>
[Fact]
public void ReadYamlFile_Test()
{
var config = new ConfigurationBuilder()
.AddYamlFile("Configs/appsettings.yml", true, true)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("YamlAppName", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("yaml@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("yaml", appOption.EMail.Recipient);
testOutput?.WriteLine("从 yaml 文件中读取配置文件! ");
}
/// <summary>
/// 读取Yaml配置流
/// 参阅 YamlFileParser.cs 扩展了 NetEscapades.Configuration.Yaml 库
/// </summary>
[Fact]
public void ReadYamlStreamFile_Test()
{
var configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs/appsettings.yml");
var fileStream = File.OpenRead(configFilePath);
var config = new ConfigurationBuilder()
.AddYamlStreamFile(fileStream)
.Build();
var appOption = config.Get<AppOption>();
//断言
Assert.NotNull(appOption);
Assert.Equal("YamlAppName", appOption.AppName);
Assert.Equal("0.0.0.1", appOption.AppVersion);
//子配置节父配置对象的属性名必须和配置KEY保持一致否则不能自动绑定。
Assert.NotNull(appOption.EMail);
Assert.Equal("yaml@163.com", appOption.EMail.ReceiveAddress);
Assert.Equal("yaml", appOption.EMail.Recipient);
testOutput?.WriteLine("从 yaml 文件中读取配置文件! ");
}
/// <summary>
/// 读取自定义配置文件
/// 需要自己实现相关类库,稍后实现
/// </summary>
[Fact(Skip = "需要自己实现相关类库,稍后实现")]
public void ReadCustomFile_Test()
{
}
public void Dispose()
{
}
}
}