.net core2 单元测试
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 单元测试的更多相关文章
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十六 ║Vue基础:ES6初体验 & 模块化编程
缘起 昨天说到了<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║ Vue前篇:JS对象&字面量&this>,通过总体来看,好像大家对这一块不是很 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来 ...
- 用C#在Visual Studio写Javascript单元测试
1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...
- Intellij idea添加单元测试工具
1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...
- Python的单元测试(二)
title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...
- Python的单元测试(一)
title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...
- javascript单元测试框架mochajs详解
关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...
- 使用NUnit为游戏项目编写高质量单元测试的思考
0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
随机推荐
- 获取Xcode工程所有的类名
有的时候在需求中需要获取工程中所有的类名.例如在获取工程中继承某个类的列表. 核心代码如下: unsigned ; const char **classes = nil; Dl_info info; ...
- 2017年java面试题【集合篇】
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. 这里有10个经典的Java面试题,也为大 ...
- 2PC(Two Phase Commitment Protocol)原理
读TiDB原理部分,知道其分布式事务是参考的Google percolator.而percolator是一种2PC的优化. 分布式事务解决的是什么问题呢? 假设一个场景,一个电商网站,用户在购买商品时 ...
- 【leetcode】475. Heaters
problem 475. Heaters solution1: class Solution { public: int findRadius(vector<int>& house ...
- 关于charles抓不到js文件的问题
在清理了cookies后重新家在页面, charles抓不到js文件. 后来在https://zhidao.baidu.com/question/1802495173294727507.html 看到 ...
- canvas 填充图片
画一个更骚气的圆 https://juejin.im/post/5781d0495bbb500061fd683d
- hightcharts详细教程
1.初始化highcharts var chart = Highcharts.chart('container', options); 2.options 自定义图表的配置项 const option ...
- python基础(八)
一.token加盐处理# import itsdangerous## salt='sdf234^#$@G'# t = itsdangerous.TimedJSONWebSignatureSeriali ...
- 利用位运算进行a+b的计算(Java&&Python)
题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...
- C#取出重复的方式以及用字典存储以键存储集合的方法
最近在做项目的时候,发现有些需求需要特别的方式来实现.下面看代码 private List<string> firstType = new List<string>(); pr ...