检查应用程序是运行还是测试运行

时间:2016-10-13 07:52:30

标签: asp.net-core nunit kestrel-http-server

我想将下面的代码移植到核心。但无论如何检查代码是否正在运行(例如:在kestrel上)或在测试中运行(例如:在NUnit上)

        if (HostingEnvironment.IsHosted)
        {
            //hosted
            return HostingEnvironment.MapPath(path);
        }

        //not hosted. For example, run in unit tests
        var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
        path = path.Replace("~/", "").TrimStart('/').Replace('/', '\\');
        return Path.Combine(baseDirectory, path);

我试着这样做 _hostingEnvirontment是IHostingEnvironment

        if (I MUST CHECK IS HOSTED OR NOT)
        {
            //hosted
            return _hostingEnvironment.ContentRootPath + path;
        }

        //not hosted. For example, run in unit tests
        var baseDirectory = AppContext.BaseDirectory;
        path = path.Replace("~/", "").TrimStart('/').Replace('/', '\\');
        return Path.Combine(baseDirectory, path);

1 个答案:

答案 0 :(得分:1)

不要让您正在测试的代码“知道”它是在现场运行还是在测试框架下运行,而是最好在测试环境中注入需要更改的内容。这使得您的应用程序通常更易于测试,并避免了让sut了解测试框架所固有的许多风险。

考虑创建一个实现IHostingEnvironment的TestHostingEnvironment,并在运行测试时将其提供给SUT。