2014-04-25 45 views
4

我想用单元测试在Visual Studio中测试我的C#代码。代码与MySQL数据库交互。与数据库交互但不在数据库中创建数据的单元测试代码

什么,我想测试
用户打开我的应用程序,将通过Web服务被保存在数据库中的一个例子。现在我想知道表Users在新用户出现之前是否还有一行。但是如果我在webservice中测试这个方法,它会在数据库中创建一个记录,那么测试数据将会在数据库中。我不希望测试数据在我的数据库中。

有没有解决这个问题的方法?

+2

如果与Web服务和数据库交互,那么它是不是一个单元测试。单元测试测试代码_in isolation_。 –

+0

使用内存数据库进行这些类型的集成测试 – NimChimpsky

+0

您应该用哑元替换数据库并对其进行断言,因为John编写的UnitTest不应与数据库进行交互。 – Console

回答

7

我认为你要找的是mocking。这允许您模拟您的数据访问代码,以测试您的业务逻辑。

有很多很好的框架,包括moqrhino mocks

如果您想实际填充数据库以测试数据访问层,那么您正在寻找更多的集成测试。我写了一个非常全面的答案,涵盖了我对数据库集成测试here的方法。

1

你在找什么是模拟。例如Moq for C#。

将数据库逻辑包装在一个界面中,并在单元测试中模拟它。这样您就可以与模拟的数据库逻辑进行交互,而无需执行它。

1

嘲笑是一种很好的方法。

它需要更多的集成测试类的方法(当您想测试实际的数据库交互时可能会有帮助),您可以使用本地运行的MySql服务器实例。

我已经创建了一个项目,让您可以在没有设置的情况下在实时MySql服务器上运行测试。

你可以下载它NuGet包(mysql.server的),或者看看这里:https://github.com/stumpdk/MySql.Server