【问题标题】:Using MSTest to test multiple database types使用 MSTest 测试多种数据库类型
【发布时间】:2011-07-04 11:19:19
【问题描述】:

我目前正在开发一个连接到多个数据库引擎的应用程序(现在有 2 个,但将来会增加),但在每个数据库上执行类似的操作。我想开发一组单元测试,我只需要编写一次,但可以在不同的数据库引擎上运行。这个应用程序将非常复杂,我预计我会为它编写数百个甚至数千个测试。

例如,我有一个检索数据库服务器中所有可用数据库的方法,我有两个类,它们具有定义 GetDatabases() 方法的相同接口。我想开发一种方法来创建实现 IDatabaseEngine 的类的实例,并在其上调用 GetDatabases() 方法。

然后我想用我的 MySQLDatabaseEngine 类调用这个方法一次,然后再用我的 SqlServerDatabaseEngine 类调用一次并测试输出。

我目前正在使用 MSTest,因为这是我最熟悉的,但如果证明不适合此任务,我不反对切换我的测试引擎。由于我今天早上才开始,到目前为止我只为此写了三个测试,所以切换根本不是问题。

甚至可能不需要对 MSTest 的配置做一些不同的事情,而是在 MSTest 中开发某种测试工具,以使用不同的参数两次运行一个方法。但是,我想避免任何我必须的情况

我考虑过代码生成,但我真的很想避免这种情况。

【问题讨论】:

  • 您能找到解决方案吗?我遇到了同样的情况。
  • @RobH:大约几周后,我发现了 XUnit 和参数化测试。我现在根本不用 MSTest。

标签: c# unit-testing mstest


【解决方案1】:

您还可以拥有接受接口实现作为参数的私有测试方法,并使用一个或另一个类(mySql 或 SQL Server)调用它们两次,这样您就有一个或两个调用者(最好是两个)但测试本身只写一次。

或者,你可以成功地使用依赖注入来获得你需要的东西,我对 DI 没有太多经验,但我听说模拟和简化这些使用模式非常棒,还有很多其他优点。

搜索 NInject 或 Unity。

【讨论】:

  • 我对使用 Ninject 的可能性非常感兴趣,我会研究一下,谢谢。此外,关于私有测试方法的想法,要正确实现它需要某种代码生成,如果可能的话,我真的很想避免。
猜你喜欢
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 2023-03-05
  • 2011-02-26
相关资源
最近更新 更多