.net core2 单元测试

 2023-09-16 阅读 26 评论 0

摘要:1.下载 https://marketplace.visualstudio.com/items?itemName=RandomEngy.UnitTestBoilerplateGenerator 2. .net core 3.0。public static AppSettings GetSettings() { var envVariable = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

1.下载   https://marketplace.visualstudio.com/items?itemName=RandomEngy.UnitTestBoilerplateGenerator

2.

.net core 3.0。public static AppSettings GetSettings()
{
var envVariable = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var env = $"env: {envVariable}";
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{envVariable}.json", optional: true)
.Build();

var result = config.Get<AppSettings>();
return result;

//var list = new List<string>();
//config.GetSection("StringList").Bind(list);
}
}

.net core ide, 

 

 

core3?ConfigurationManager.AppSettings is a static dependency, so how can you unit test? Actually it's pretty easy - GetSection, Save, RefreshSection.
The only caveat is you must have an app.config in your test project, even if it's empty.

[TestClass]
public class ChangeConfigurationTest
{
    private const string Value = "Hello";
    private const string KeyValue = "MySetting";
 
    private static void ChangeConfiguration()
    {
        //the .config must exist (AppSettings doesn't have to be there).
        //if your test class doesn't have an App.config, this succeeds but the new appSetting is not loaded.
        var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetCallingAssembly().Location);
        var appSettings = (AppSettingsSection)config.GetSection("appSettings");
        appSettings.Settings.Clear();
        appSettings.Settings.Add(KeyValue, Value);
        config.Save();
        ConfigurationManager.RefreshSection("appSettings");
    }
 
    [TestMethod]
    public void TestMethod1()
    {
        var setting = ConfigurationManager.AppSettings[KeyValue];
        Assert.AreEqual(true, string.IsNullOrEmpty(setting));
        ChangeConfiguration();
        setting = ConfigurationManager.AppSettings[KeyValue];
        Assert.AreEqual(Value, setting);
    }
}

ConnectionStrings

The corresponding code for a connection string.

net core 5,private static void ChangeConfiguration()
{
    var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetCallingAssembly().Location);
    var connectionStrings = (ConnectionStringsSection)config.GetSection("connectionStrings");
    connectionStrings.ConnectionStrings["MyDatabase"]
        .ConnectionString = @"Data Source=C:\Dev\commands.sqlite";
    config.Save();
    ConfigurationManager.RefreshSection("connectionStrings");
}

 

3.

var options = new AbOptions(){ cc = new cc { D1 = "https://", D2 = "123145854170887" } }; var mock = new Mock<IOptionsSnapshot<AbOptions>>(); mock.Setup(m => m.Value).Returns(options); var service = new AbClass(mock.Object);

4.

net core性能怎么样,ound it. i have to bind the instance

var optionValue  = new MyOptions();
_config.GetSection("MyOptions").Bind(optionValue);var options = Options.Create<MyOptions>(optionValue);

or i can also do

 var optionValue = _config.GetSection("MyOptions").Get<MyOptions>();var options = Options.Create<MyOptions>(optionValue);


var mock = new Mock<ILogger<BlogController>>(); ILogger<BlogController> logger = mock.Object; //or use this short equivalent  logger = Mock.Of<ILogger<BlogController>>() var controller = new BlogController(logger);

You probably will need to install Microsoft.Extensions.Logging.Abstractions package to use ILogger<T>.

Moreover you can create a real logger:

var serviceProvider = new ServiceCollection() .AddLogging() .BuildServiceProvider(); var factory = serviceProvider.GetService<ILoggerFactory>(); var logger = factory.CreateLogger<BlogController>();



https://github.com/Moq/moq4/wiki/Quickstart

https://martinwilley.com/net/code/appsettingtest.html

Security Code Scan

转载于:https://www.cnblogs.com/zwei1121/p/10154435.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/68329.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息