【问题标题】:How can I use fake datacontext for Specflow tests如何使用虚假数据上下文进行 Specflow 测试
【发布时间】:2013-03-27 12:34:53
【问题描述】:

我正在编写 specflow 测试,我想从内存数据库中运行,以使测试运行得更快并更好地控制我的数据。

目前: 使用数据上下文的工作单元生命周期 http://blog.stevensanderson.com/2007/11/29/linq-to-sql-the-multi-tier-story/

使用类似于以下内容的虚假上下文设置: http://refactorthis.wordpress.com/2011/05/31/mock-faking-dbcontext-in-entity-framework-4-1-with-a-generic-repository/

如何在 Specflow 中使用这个假上下文?我似乎无法从 Specflow 访问当前的 dbcontext 单例,所以我不能只在那里设置假数据上下文并让它影响正在运行的测试。

我能否以某种方式告诉我的网站我正在 specflow 中进行测试并在该场景中使用 fakecontext?我应该使用按钮按下或 url 参数还是我可以做其他事情?

【问题讨论】:

    标签: entity-framework unit-testing functional-testing specflow


    【解决方案1】:

    如何在 Specflow 中使用这个假上下文?我似乎无法从 Specflow 访问当前的 dbcontext 单例,所以我不能只在那里设置假数据上下文并让它影响正在运行的测试。

    由于您实际上并没有说出您的错误是什么,我将大胆猜测internal static class FakeContext 是在与您声明的 SpecFlow 测试不同的程序集中声明的。如果是这种情况,那么您需要添加

    [assembly:InternalsVisibleTo("MyApplication.SpecFlowTests")] //name of the test assembly
    

    到包含 FakeContext 的 Assembly 的 AssemblyInfo.cs。

    或者将类声明为public

    我能否以某种方式告诉我的网站我正在 specflow 中进行测试并在该场景中使用 fakecontext?我应该使用按钮按下或 url 参数还是我可以做其他事情?

    您可以告诉网站您正在对其进行测试,但如果某些恶意人员在生产中发现了执行此操作的顺序,那么您将遇到问题。

    既然你在谈论模拟你的数据库和测试一个网站,那么我假设你正在使用 ATDD(参见Development_style 的最后一段),那么更好的方法是同时自动化你的网站托管您以自动方式(通常通过 Selenium)启动浏览器的时间。通过这种方式,您可以控制您的网站如何选择其数据库,而无需将该功能暴露给整个世界。

    【讨论】:

    • 我可以看到程序集并访问静态上下文,但我在验收测试项目中设置的值不会传播到我正在运行的网站(反之亦然)。
    • 我不太关心有人找出如何针对假数据库运行它(我绝对考虑过),因为他们无法进行任何持久的更改。
    • 我正在尝试在 VS2010 中运行它 - 您是否建议在从验收测试项目启动时以特定方式启动 ASP.NET 开发服务器?
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多