【问题标题】:How can I programmatically start and interact with an ASP.NET MVC application?如何以编程方式启动 ASP.NET MVC 应用程序并与之交互?
【发布时间】:2013-12-17 13:52:04
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序。它的HttpApplication 看起来像这样:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        //Do some sort of initialisation. Set the DependencyResolver.
    }
}

对于集成测试,我想以编程方式启动应用程序并使用其DependencyResolver 与之交互。访问DependencyResolver 似乎很容易,因为我可以打电话给DependencyResolver.Current。但是,我还没有弄清楚如何让应用程序初始化逻辑运行。

我尝试调用new MvcApplication().Init(),但这似乎不会触发Application_Start 方法调用。我尝试从MvcApplication 继承并提供直接调用Application_Start 的访问权限,但这失败了,出现了来自 ASP.NET MVC 的异常。

【问题讨论】:

  • 在我看来,您正在尝试在这里测试框架。你应该只测试你自己的代码,如果你需要模拟你应该模拟的应用程序对象。
  • @James,我正在尝试测试当应用程序与框架集成时,会实现特定的结果。我不同意只测试你自己的代码;我认为自动测试应用程序的集成与让人类这样做一样有效。如果应用程序自己的代码运行良好但不能与外部系统正确集成,应用程序有什么用?如果用户甚至不能使用它,它是没有用的。
  • @James,是的,模拟框架是一个选项,但这并不意味着我应该这样做。还有其他有效的选项。模拟不会发现我在手动测试此集成测试应涵盖的功能时遇到的与配置相关的集成错误。
  • 看看这个:stackoverflow.com/a/1651546/1246870 - 有帮助吗?
  • @Sam 让我换个说法,在我看来你不应该真的在测试框架代码。我坚持我所说的,你应该只测试你的代码,因为它是你编写的,像 MVC 这样的框架在发布给公众之前会经过彻底的测试。 “Mocking 不会捕获与配置相关的集成错误” - 这是因为 Mocking 的设计目的不是捕获任何东西,它旨在给您一个特定的期望对象。

标签: .net asp.net-mvc integration-testing


【解决方案1】:

您可以使用 Selenium WebDriver 进行 MVC 应用程序的集成测试。您可以通过编写 Web 浏览器要执行的操作以编程方式与应用程序 UI 交互。然后可以从 MSTest 运行集成测试,以便您可以针对 UI 编写断言。这是关于 Selenium 的文档http://docs.seleniumhq.org/docs/03_webdriver.jsp

这是一个代码示例:

    [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 包的形式提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多