2011-09-01 53 views
5

一般的建议是我应该总是测试我的数据库迁移,但怎么做它似乎是一个保存完好的秘密;)我如何测试我的FluentMigrator迁移?

我选择的框架是FluentMigration。

我觉得我想要做的是:

  1. 数据库迁移到N-1。
  2. 保存一些数据。
  3. 将数据库迁移到N.
  4. 读取数据并验证它没有丢失。
  5. 验证等相关变化

但我无法弄清楚如何从我的单元测试运行迁移。

+0

这是一个非常集成的测试,而不是单元测试。如果你想模拟数据库,那么测试将是毫无意义的。但这只是一个小问题;-)理查德的答案就是你需要的。你是否也要测试向下迁移?他们是那些通常包含错误的人,如果注意到迁移不起作用,你会马上注意到它们。 –

+0

我使用单元测试框架时,倾向于使用术语“单元测试”。我不确定我是否会进行集成测试,即使它符合定义;它与集成真的没有关系。但我同意,这是一个小小的狡辩。 –

+0

好点,顺便说一句,测试向下迁移。 –

回答

2

揭开序幕在集成测试迁移刚掏出来使用的Process.Start

例如

var migrator = System.Diagnostics.Process.Start("migrator.exe", "/connection \"Data Source=db\\db.sqlite;Version=3;\" /db sqlite /target your.migrations.dll"); 
migrator.WaitForExit(); 

的migrate.exe命令如果您正在使用MSTest的,你必须确保将migrator.exe作为部署项目包含在内,或者指定启动进程时.exe所在位置的路径。

+0

在我看来,使用部署项目是一个坏习惯。但即使我不使用MSTest,我也必须确保.exe被复制到bin文件夹中?或者指定路径? –

+0

如果您使用xUnit或类似的,只需包含migrator的完整路径exe –