我目前正在开发一个连接到多个数据库引擎的应用程序(目前只有2个,但将来会增长)但在每个数据库上做类似的事情。我想开发一组单元测试,我只需编写一次,但可以在不同的数据库引擎上运行。这个应用程序将非常复杂,我预测我将为它编写数百个(如果不是数千个)测试。
例如,我有一个方法可以检索数据库服务器中可用的所有数据库,并且我有两个类具有定义GetDatabases()方法的相同接口。我想开发一个方法来创建一个实现IDatabaseEngine的类的实例,并在其上调用GetDatabases()方法。
然后,我想用我的MySQLDatabaseEngine类调用此方法一次,再次使用我的SqlServerDatabaseEngine类调用输出。
我目前正在使用MSTest,因为这是我最熟悉的,但我不反对切换我的测试引擎,如果它被证明不适合这项任务。由于我今天早上刚刚开始,到目前为止我只为此编写了三个测试,所以切换根本不会成为问题。
甚至可能不需要对MSTest的配置做一些不同的事情,而是在MSTest内部开发某种测试工具以使用不同的参数运行两次方法。但是,我想避免任何我必须的情况
我考虑过代码生成,但我真的想避免这种情况。
答案 0 :(得分:1)
您还可以使用私有测试方法接受接口实现作为参数,并使用一个或另一个类(mySql或SQL Server)调用它们两次,这样您就有一个或两个调用者(更好的两个)但测试本身只写一次。
或者,你可以成功地使用依赖注入来获得你所需要的东西,我对DI没有很多经验,但是我听到的是很好的模仿和简化这些使用模式,还有很多其他优点。 / p>
搜索NInject或Unity。