【问题标题】:How do I start kestrel from a test?如何从测试中启动红隼?
【发布时间】:2015-11-17 02:36:47
【问题描述】:

我正在使用 beta8 为我的 ASP.NET 5 项目设置回归测试。当我设置测试装置时,我想启动 kestrel,这样我就可以在不需要任何外部 Web 服务器的情况下对其运行 selenium 测试。我该怎么做?

基本上是这样的:

public class RegressionTests : IDisposable
{

    public RegressionTests()
    {
        // Start kestrel
    }

    [Fact]
    public void Test1()
    {
        Assert.True(true);
        // more tests...
    }

    public void Dispose()
    {
        // Shutdown kestrel
    }
}

这是我迄今为止尝试过的,但我无法让它发挥作用。它不会获取 project.json 文件。好吧,老实说,我不知道要传递给它什么,因为我在任何地方都找不到可以传递给Microsoft.AspNet.Hosting.Program 的命令参数。

new Microsoft.AspNet.Hosting.Program(CallContextServiceLocator.Locator.ServiceProvider).Main(
            new[] 
            {
                "--server",
                "Microsoft.AspNet.Server.Kestrel",
                "--project",
                "../Web/project.json",
                "--port",
                "5001",
            });

【问题讨论】:

    标签: c# asp.net asp.net-core xunit.net


    【解决方案1】:

    感谢@Victor Hurdugaci。对于未来的谷歌人来说,这就是我最终拥有的。这是我用于 xunit 的测试夹具。缺少 TestConfiguration 类,但您应该明白这一点。你需要添加对Microsoft.AspNet.Server.Testing的依赖。

    public class WebTestsFixture : IDisposable
    {
        private readonly IApplicationDeployer _deployer;
        private readonly IDisposable _loggerScope;
    
        public WebTestsFixture()
        {
            var logger = new LoggerFactory()
                .AddConsole(LogLevel.Information)
                .CreateLogger("Regression");
    
            _loggerScope = logger.BeginScope("RegressionTestSuite");
    
            var deploymentParameters = new DeploymentParameters(
                TestConfiguration.Configuration.Get<string>("Settings:ApplicationPath"),
                (ServerType)Enum.Parse(typeof(ServerType), TestConfiguration.Configuration.Get<string>("Settings:ServerType")),
                RuntimeFlavor.Clr,
                RuntimeArchitecture.x86)
            {
                ApplicationBaseUriHint = TestConfiguration.Configuration.Get<string>("Settings:ApplicationUri"),
                EnvironmentName = TestConfiguration.Configuration.Get<string>("Settings:EnvironmentName"),
                PublishWithNoSource = false
            };
    
            _deployer = ApplicationDeployerFactory.Create(deploymentParameters, logger);
    
            DeploymentResult = _deployer.Deploy();
        }
    
        public DeploymentResult DeploymentResult { get; private set; }
    
        public void Dispose()
        {
            _loggerScope.Dispose();
            _deployer.Dispose();
        }
    }
    

    【讨论】:

      【解决方案2】:

      @mardoxx points out 记录了一种更现代、更简单的测试方法here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-18
        • 2016-02-24
        • 2012-09-18
        • 2022-01-11
        • 2011-10-01
        • 2014-07-07
        • 1970-01-01
        • 2020-03-31
        相关资源
        最近更新 更多