2013-04-28 65 views
2


我正在用MvvmCross v3和Xamarin解決方案創建一個跨平臺項目,我想創建一些單元測試。 This似乎有點過時,所以我試圖按照this,它按預期工作。MvvmCross:帶插件的單元測試服務

但是,我現在正在嘗試對我的一些域服務進行單元測試,這些域服務依賴於平臺特定的MvvvCross插件(例如ResourceLoader)。

運行測試結果在以下異常:

Cirrious.CrossCore.Exceptions.MvxException: Failed to resolve type 
Cirrious.CrossCore.Plugins.IMvxPluginManager. 

我認爲IMvxPluginManager在安裝流程大概註冊,和我需要包括平臺實現我的項目中的插件,但我想知道設置我的單元測試項目的首選方式是什麼?有什麼我失蹤了嗎?

是否有任何更新教程上述任務?

是否已有任何支持測試環境的插件平臺擴展,還是應該嘗試自己編寫它們?

回答

4

通常,在服務測試期間,您不應該加載插件或真正的MvxPluginManager

相反,您的單元測試應該爲您的服務需要使用的接口註冊模擬類型。

var mock = new Mock<INeedToUse>(); 
// use mock.Setup methods 
Ioc.RegisterSingleton<INeedToUse>(mock.Object); 
// or you can use constructor dependency injection on INeedToUse instead 

您也可以註冊一個模擬IMvxPluginManager,如果你真的需要,但在大多數情況下,我不相信你應該需要這一點。如果您有絕對需要的情況,請發佈代碼示例 - 使用代碼而不是文本交談更容易。

+0

嗨,斯圖亞特,謝謝,我會試圖製造嘲笑。是不是創建一個模擬,讓我們說IMvxPluginManager,實際上是相同的實施單元測試項目的「插件」?假設我的測試服務實際上應該正在加載資源文件... – Liel 2013-04-29 03:40:10

+0

沒有看到您的服務我不確定 - 但通常我個人更喜歡只是在我的測試中從c#提供一個字符串,而不是添加資源文件並依靠一個測試插件。如果你確實想寫一個模擬插件,你可以 - 也許我'你不應該'的回答是措辭強烈 - 也許更像'我不會' – Stuart 2013-04-29 06:31:31

+0

如果你真的想測試真正的插件呢?可能嗎? – tofutim 2013-12-14 17:40:32

3

這種情況應該是可能的。我想UnitTest我的SqlLite服務實現。我做了以下才能正常工作:

  • 創建一個Visual Studio單元測試項目
  • 添加一個參考。核心移植庫項目
  • 添加的NuGet參考MvvmCross測試助手
  • 添加金塊參考MvvmCross SqlLite插件 (這會利用WPF實現SqlLite的)

下載SqlLite窗口庫,這些拷貝到您的檢驗p項目 Sql Lite Download location 並確保將sqllite3.dll添加到您的單元測試項目的根目錄並將「複製到輸出庫」設置爲「始終複製」。這將確保實際的sqllite數據庫被複制到單元測試dll位置。 (檢查DLL被複制到你的bin/debug文件夾)

然後寫上你的單元測試方式如下:

[TestClass] 
public class SqlServiceTests:MvxIoCSupportingTest 
{ 
    private readonly ISQLiteConnectionFactory _factory; 

    public SqlServiceTests() 
    { 
     base.ClearAll(); 

     _factory = new MvxWpfSqLiteConnectionFactory(); 
     Ioc.RegisterSingleton<ISQLiteConnectionFactory>(_factory); 
    } 
    [TestMethod] 
    public void YourSqlLiteTest() 
    { 
     // Arrange 
     var si = new SqlDataService(_factory); 
     var list = si.GetOrderList(); 
    } 
} 

我還沒有與我的視圖模型測試了這一點。通過使用IoC.RegisterSingleton方法,SqlConnectionFactory應該可用於您的視圖模型。

+0

輝煌,謝謝。我是那些沒有進行「正確方式」單元測試的人之一,但它對我很有用。具體來說,我喜歡在「:memory:」模式下使用SQLite來針對實際數據運行測試(在測試運行時加載)。當我試圖指定「:memory:」作爲db名稱時,它抱怨說它無法在C:\ Users \上創建數據庫... – 2014-01-07 14:18:28