简而言之,问题是我们在BDD定义上磕磕绊绊,这些定义或多或少需要不同的状态 - 这导致需要模拟ASP.NET / MVC的各种类型 - 我知道没有,这就是我要问的原因这里
详细说明: 我们正在开发ASP.NET(MVC3 / Razor引擎)项目,并使用SpecFlow来推动我们的开发。
我们经常偶然发现需要被测网页以某种方式执行的情况,以便我们可以验证行为,即:
Scenario: Should render alternatively when backend system is down
Given that the backend system is down
And there are no channels for the page to display
When I inspect the webpage under test
Then the page renderes an alternative html indicating that there is a problem
对于单元测试,这不是问题 - 在控制器位上运行模拟,并验证它是否提供了正确的结果,但是,对于SpecFlow测试,这或多或少需要备用配置。
所以有可能,或者 - 是否有一些用于开发使用BDD的网页的已知软件模式我错过了?
答案 0 :(得分:1)
即使使用SpecFlow,您仍然可以使用模拟框架。我要做的是使用[BeforeScenario]
属性为测试设置模拟,例如。
[BeforeScenario]
public void BeforeShouldRenderAlternatively()
{
// Do mock setups.
}
This SO question也可能会派上用场。
答案 1 :(得分:0)
您可以使用Deleporter
Deleporter是一个小型.NET库,可以将任意代理传送到某个其他进程中的ASP.NET应用程序(例如,在IIS中托管)并在那里运行它们。
它允许您深入研究远程ASP.NET应用程序的内部,而无需远程应用程序的任何特殊协作,然后您可以执行以下任何操作:
- 跨进程模拟,将其与任何模拟工具相结合。例如,您可以注入临时模拟数据库或模拟时间的流逝(例如,如果您的集成测试想要指定30天后发生的事情或其他什么)
- 测试不同的配置,方法是写入远程ASP.NET应用程序域中的静态属性或使用ConfigurationManager API编辑其条目。
- 运行拆卸或清理逻辑,例如刷新缓存。例如,最近我需要在套件中的每个测试之后将SQL数据库恢复到已知状态。麻烦的是,ASP.NET连接池仍然在旧数据库上保持打开连接,从而导致连接错误。我通过使用Deleporter在远程appdomain中发出SqlConnection.ClearAllPools()命令轻松解决了这个问题 - 被测试的ASP.NET应用程序不需要了解它。