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

2.

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);
}
}

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.

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.

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

.net core2 单元测试的更多相关文章

  1. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十六 ║Vue基础:ES6初体验 & 模块化编程

    缘起 昨天说到了<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║ Vue前篇:JS对象&字面量&this>,通过总体来看,好像大家对这一块不是很 ...

  2. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划

    .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划   原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来 ...

  3. 用C#在Visual Studio写Javascript单元测试

    1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...

  4. Intellij idea添加单元测试工具

    1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...

  5. Python的单元测试(二)

    title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...

  6. Python的单元测试(一)

    title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...

  7. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  8. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  9. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试

    目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解 ...

随机推荐

  1. AI五子棋第四周——接近尾声

    欢乐时光过得特别快~ 真是快乐的一周,就是项目进展几乎纹丝不动. 燃尽图?? (添加了背景音乐,找到了一个很好的音乐素材网站!) (添加了俩图标:重开,和音乐.) (调了一下前后端通讯,基本能通话了, ...

  2. mybatis 源码分析二

    1.SqlSession下的四大对象 Executor.StatementHandler.ParameterHandler.ResultSetHandler StatementHandler的作用是使 ...

  3. Spring Boot框架的自动配置

    (图片来源于网络,侵删!!!) l  @RestController 因为我们例子是写一个web应用,因此写的这个注解,这个注解相当于同时添加@Controller和@ResponseBody注解 l ...

  4. 什么是混合app?

    APP混合模式和原生模式的优劣 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-06-27 每当你打算开发移动应用程序时,都要考虑你的应用如何创建以及如何部署 ...

  5. android studio学习(一)

    关于布局绝大部分使用线性布局和相对布局LinearLayout线性布局android:id 标识,找到空间"@+id/"android:layout_width 宽度android ...

  6. Jump跳板机的搭建和部署

    Jump跳板机简绍   概括 Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent. Jumpserver ...

  7. Resin安装配置

    在linux下安装Resin过程整理   下载Resin, http://caucho.com/products/resin/download#download   检查JDK是否安装,环境是否配置 ...

  8. redis过期机制

    Redis会自己回收清理不用的数据吗? 如果能,那如何配置? 如果不能,如何防止数据累加后大量占用存储空间的问题? 之前一直接触Redis不是很深入,最近项目当中遇到一个需求场景,需要清空一些存放在R ...

  9. pip安装报错 解决办法

    安装库时报错:Could not fetch URL https://pypi.python.org/simple/wheel/: 解决办法:  pip --trusted-host pypi.pyt ...

  10. java虚拟机的学习书籍推荐

    javaEE开发已然是一个老生常谈的话题了,但经典之所以会成为经典,就是因为有可重复琢磨之处,每一次的反复推敲都会有不一样的收获.如果你不满足于做一个只会写if…else…的Java程序员,而是希望更 ...