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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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()
{
}
}
}