0

我正在编写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?我应该使用按钮按下还是使用url参数还是有其他事情可以做?

回答

0

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

既然你还没有真正说你的错误是什么,我要做一个大胆猜测,该internal static class FakeContext在装配不同的,以你的SpecFlow测试声明的一个声明。如果是这种情况,那么你需要

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

添加到包含FakeContext大会的AssemblyInfo.cs。

或者声明该类为public

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

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

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

+0

我可以看到程序集并访问静态上下文,但在验收测试项目中设置的值不会传播到我正在运行的网站(反之亦然)。 – rickjr82 2013-03-27 17:34:14

+0

我并不太在意有人发现如何对假数据库运行它(我绝对认为它),因为他们将无法做出任何持续的更改。 – rickjr82 2013-03-27 17:36:06

+0

我试图在VS2010中运行这个项目 - 你是否建议在从验收测试项目启动时以特定方式启动ASP.NET开发服务器? – rickjr82 2013-03-27 17:37:59