如何从测试开始红隼?

时间:2015-11-17 02:36:48

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

我正在使用beta8为我的ASP.NET 5项目设置回归测试。当我设置测试装置时,我想启动红隼,这样我就可以对它进行selenium测试而无需任何外部Web服务器。我该怎么做?

基本上是这样的:

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的命令args。

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

3 个答案:

答案 0 :(得分:2)

看看MusicStore sample E2E Tests。他们启动所有服务器(IIS,Kestrel,WebListener)。

在幕后,他们使用Microsoft.AspNet.Server.Testing中的部署人员。

答案 1 :(得分: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 :(得分:0)

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