如何使用伪datacontext进行Specflow测试

时间:2013-03-27 12:34:53

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

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

目前: 使用datacontext的工作单元生命周期 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单例,所以我不能在那里设置假的datacontext并让它影响正在运行的测试。

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

1 个答案:

答案 0 :(得分:0)

  

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

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

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

包含FakeContext的汇编的AssemblyInfo.c。

或者将该类声明为public

  

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

你可以告诉网站你正在测试它,但是如果一些恶意的人发现生产过程中这样做的顺序,那么你就会遇到问题。

由于您正在讨论模拟数据库和测试网站,我将假设您正在使用ATDD(请参阅Development_style的最后一段),然后更好的方法是自动托管您的网站同时您以自动方式启动浏览器(通常通过Selenium)。通过这种方式,您可以控制网站选择数据库的方式,而不会将该功能暴露给整个世界。