一點背景:用戶界面測試與RavenDB
我有一個web應用程序讀取存儲在RavenDB中的非規範化文檔集。這些文檔是由事件處理程序創建和修改的。在生產中,應用程序使用標準文檔存儲,通過c#API連接到遠程數據庫。
當我單元測試應用程序時,我將處理程序配置爲使用內存嵌入式數據庫,創建一些事件並查詢預期的文檔。這工作絕對好。
編寫UI測試:
我想使我們的測試人員編寫使用SpecFlow和硒自動化UI測試。在實現這個爲其他應用程序(使用SQL),特徵文件的執行將通過編寫一個測試環境:
- 在當地的SQLExpress實例創建一個新的數據庫(按照慣例每個人都有同樣的情況名的機)
- 重新配置的處理程序來使用新的數據庫,並引發事件以創建所需的狀態
- 拷貝測試中的Web應用程序到一個新的臨時位置,並重新在新的數據庫
- 啓動Web應用程序讀取在IIS Express中(再次大家遵循這個約定)
- 運行特徵(一個或多個),落料和如果需要的話
- 停止IIS,刪除該應用程序下測試,並且刪除數據庫
現在我想遵循相同的方法重建的每個之間的狀態使用烏鴉,我正在考慮兩種方法。
第一種是遵循與上述完全相同的模型。我在這裏的問題是如何/在哪裏存儲數據庫,以及之後如何整理它們。服務器可執行文件可以在安裝和拆卸過程中以編程方式啓動和停止,並且之後可以通過刪除文件刪除數據庫。我沒有嘗試過,但理論上它應該起作用。
第二種是遵循類似的方法,但用標準文檔存儲替換嵌入式文檔(不在內存中運行)。爲此,我需要修改Web應用程序的IoC(如果使用xml中的配置),以將IDocumentStore解析爲EmbeddedDocumentStore。然後,我像之前一樣使用處理程序構建狀態,然後在啓動IIS之前處理處理程序的文檔存儲區(似乎無法在使用相同嵌入式數據庫的同一時間運行兩個應用程序,除非我缺少它東西)。
第二種方法似乎是最好的選擇,但我遇到了一些奇怪的行爲,即處理程序創建的文檔與Web應用程序查詢返回的結果不一致。具體來說,某些子集合由處理程序填充,但從Web應用程序執行的查詢返回時爲空。說實話,我並不太驚訝,因爲我懷疑這是嵌入式數據庫打算被使用的場景。另外,當我從一個應用程序跳到另一個應用程序時,通過管理工作室查看嵌入式數據庫非常困難。
因此,無論如何,在那段冗長的描述之後,我很好奇別人對這些方法的看法,以及是否有更好的選擇我錯過了。另外我確定有很多隱藏的RavenDB寶石,我不知道,所以任何指向這個方向的指針都會有幫助。
真棒的東西。這不是一件容易的事情! – Nigel