我是ASP.NET MVC 5世界和SpecFlow的新手。我正在尝试将一个简单的例子放在一起用于学习目的。我在一个程序集中有一个ASP.NET MVC项目,在另一个程序集中有一个SpecFlow定义。我试图避免在设置中使用数据库,因为我正在努力保持这种轻量级。我想要做的是在MVC服务器上有一个内存中的数据对象集合,我可以从SpecFlow定义中进行操作。即我希望有这样的流程:
(1)在SpecFlow中我说的是
Given I have the following account data | Id | Balance | | abc | 123 |
(2)然后,我希望SpecFlow绑定将新的Account对象注入到IISExpress进程上运行的内存中集合中。
(3)最后我想在SpecFlow中要求
Then when I view the account balance of 'abc' in the web browser I am shown a balance of '123'
...然后绑定将运行WatiN以使IE打开正确的URL并解析结果。
我缺少的是一种将数据注入正在运行的IISExpress的方法。我可以通过在MVC应用程序中对一些配置进行硬编码来解决问题,但这不是我正在寻求的动态测试解决方案。任何建议都感激不尽!
答案 0 :(得分:1)
我知道这只是一种学习经历,但我会考虑这是否是一个真实的系统,你如何将它变成一个生产稳定的代码。这样你就有机会学到更多东西。
不幸的是,没有银弹会给你一个解决方案。事实上,你需要的东西可能比它最初看起来要复杂得多。
你需要,
现在我道歉但是到目前为止我会让你质疑你的决定。上面我们讨论了从前到后测试所有问题的所有问题。它可以在验收测试中使用,或者作为回归测试使用,但它在学习如何做这些事情方面确实没有用。当您考虑业务流程时,SpecFlow的效果最佳。那么你需要你的测试来讨论网络浏览器吗? (快速阅读Whose domain is it anyway?)
如果您写了
,该怎么办?Then the account balance of 'abc' should be '123'
现在你已完全抽象出UI,这是Subcutaneous testing。这将允许您避免在Web服务器中运行测试的需要,这将为您提供更容易的方式来注入假数据存储。
你也可以写
When I click on 'Check Balance'
Then it should call the 'CheckBalanceCommand'
这将允许您仅测试UI层,并且可以使用 Mock -ed层替换Command层,以避免所有数据存储设置。
事实上,您甚至可能想要考虑一种测试架构,例如 - UI - >命令 - 命令 - >商业逻辑 - 命令 - >数据存储
或者您可能只想尝试一下大量的测试? : - )