• .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:Devcommands.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
  • 相关阅读:
    【3】jQuery学习——入门jQuery选择器之基本选择器
    对于转载引发的问题没见过这样强硬的论坛
    SQL2进制问题
    用SQL只获取日期的方法
    C#算法求2进制的问题
    ASP.NET Ajax In Action!读书笔记1
    Fckeditor配置
    MIME types list
    SQL case when then else end运用
    ASP.Net访问母版页(MasterPage)控件、属性、方法及母版页中调用内容页的方法
  • 原文地址:https://www.cnblogs.com/zwei1121/p/10154435.html
Copyright © 2020-2023  润新知