如何以编程方式启动ASP.NET MVC应用程序并与之交互?

如何以编程方式启动ASP.NET MVC应用程序并与之交互?,.net,asp.net-mvc,integration-testing,.net,Asp.net Mvc,Integration Testing,我正在开发一个ASP.NET MVC应用程序。其HttpApplication如下所示: public class MvcApplication : HttpApplication { protected void Application_Start() { //Do some sort of initialisation. Set the DependencyResolver. } } 对于集成测试,我希望以编程方式启动应用程序,并使用其depende

我正在开发一个ASP.NET MVC应用程序。其
HttpApplication
如下所示:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        //Do some sort of initialisation. Set the DependencyResolver.
    }
}
对于集成测试,我希望以编程方式启动应用程序,并使用其
dependencysolver
与之交互。访问
dependencysolver
似乎很容易,因为我可以直接调用
dependencysolver.Current
。但是,我还没有弄清楚如何运行应用程序初始化逻辑


我尝试调用
new mvcapapplication().Init()
,但这似乎没有触发
应用程序启动
方法调用。我尝试从
mvcapapplication
继承并提供对直接调用
应用程序启动的访问,但失败,ASP.NET MVC出现异常。

您可以使用Selenium WebDriver集成测试MVC应用程序。您可以通过编码web浏览器要执行的操作,以编程方式与应用程序UI交互。然后可以从MSTest运行集成测试,以便您可以针对UI编写断言。以下是有关Selenium的文档

下面是一个代码示例:

    [TestMethod]
    public void runUITest()
    {
        driver = new FirefoxDriver(); //launches a Firefox window so you can observe the test run
        driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 7));                
        driver.Navigate().GoToUrl("http://localhost/yourWebApp"));
        //assert something
Assert.IsTrue(driver.FindElement(By.XPath("//fieldset[@id='YourControl']/div/div[2]/label/span/span")).Displayed);
        //find an element and click it
        driver.FindElement(By.Id("FormSubmitButton")).Click();           
    }

Selenium WebDriver作为一个NuGet软件包提供。

听上去好像您正在尝试测试这个框架。您应该只测试您自己的代码,如果您需要模拟应用程序对象,您应该模拟它。@James,我试图测试当应用程序与框架集成时,会获得特定的结果。我不同意只测试你自己的代码;我认为,自动测试应用程序的集成和让人这样做一样有效。如果应用程序自己的代码运行良好,但不能与外部系统正确集成,那么应用程序有什么好处?如果用户甚至不能使用它,那就没用了。@James,是的,模仿框架是一种选择,但这并不意味着我应该这么做。还有其他有效的选择。Mocking不会发现我在手动测试该集成测试应该涵盖的功能时遇到的与配置相关的集成错误。看看这一个:-它有帮助吗?@Sam让我重新表述一下,我认为你不应该真正测试框架代码。我坚持我所说的,你应该只测试你的代码,因为它是你所写的,像MVC这样的框架在向公众发布之前应该经过彻底的测试。“Mocking不会捕获与配置相关的集成bug”-这是因为Mocking的设计目的不是捕获任何东西,而是让您对特定对象有一个期望。