0

我正在编写 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 参数还是我可以做其他事情?

4

1 回答 1

0

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

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

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

到包含FakeContext.

或者将类声明为public.

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

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

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

于 2013-03-27T13:46:48.377 回答