2011-10-21 59 views
2

我想單元測試使用JSON序列化和運行在內存模式下的Sqlite的EventStore持久性。在EventStore初始化期間,我收到了「沒有這樣的表:提交」異常。我假設這是因爲EventStore以某種方式關閉連接並打開一個新連接,導致它看到一個新的內存中的Sqlite實例(sans Commits表)。有什麼辦法可以做到這一點?事件存儲和Sqlite內存中

回答

2

SQLite實現很有趣,特別是當你使用「:memory:」連接字符串時。圍繞實施的驗收測試取決於數據庫在操作之間沒有「消失」。

的EventStore的基本設計分離每個離散動作到一個單獨的操作,其中:

  1. 取決於配置,報名在環境TransactionScope的(如果有的話)
  2. 打開連接
  3. 構建在IDbCommand的
  4. 執行的IDbCommand
  5. 評估結果
  6. 部署的連接(其釋放回池中)
  7. 完成的TransactionScope(沒有拋出異常)
  8. 部署的TransactionScope的

你正在運行到的問題是,每次調用針對EventStore打開和關閉連接。

現在,有一種解決方法,因爲我想明確支持使用相同的IDbConnection而不將它釋放回池中。 EventStore 3.0(這是在發佈候選階段)具有利用相同的連接,並且避免連接撕每次操作之後向下一個方法調用:

ConfigurationConnectionFactory.OpenScope("SQLite"); // SQLite = app.config connection key 

只需將此添加到「using_the_persistence_engine」驗收測試類和就這麼簡單:

private static IDisposable scope; 

添加爲第一行 「建立情境」:

scope = ConfigurationConnectionFactory.OpenScope("SQLite"); 

最後,在lastLine所 「清理一切」 S應該是:

scope.Dispose(); 
+0

我在Web Api集成測試中遇到同樣的問題。無法讓您的解決方案適合我。例子是[here](http://www.filedropper.com/eventstoredisposedobjectissue)有什麼想法? –

+0

@MartinNilsson與SQLite和您的測試運行器有什麼關係x86/x64的問題? –

+0

這似乎是IQueryable與IEnumerable的問題。 [https://gist.github.com/3009467](https://gist.github.com/3009467) 注意我還需要在從方法 –