2016-10-12 102 views
0

我想將單元測試包括到我的Xamarin PCL項目中。依賴項服務空單元測試中的參考異常

這就是我基本上是這樣做的:

登錄頁面類:

public bool isUserRemembered() 
    { 
     return DependencyService.Get<IUserDefaults>().getUserRemembered(); 
    } 

    public void setRememberUser(bool check) 
    { 
     DependencyService.Get<IUserDefaults>().setUserRemembered(check); 
    } 

單元測試類(IOS):

[Test] 
    public void RememberKeyTrueTest() 
    { 
     LoginPage page = new LoginPage(); 
     bool isRemember = true; 

     page.setRememberUser(isRemember); 

     bool value = page.isUserRemembered(); 
     if (value) 
      Pass(); 
     else 
      Fail(); 
    } 

我得到空引用異常在這條線:DependencyService.Get<IUserDefaults>().setUserRemembered(check)

依賴項服務是否適用於單元測試?或者有任何解決方法嗎?

+1

您是否需要配置服務?無論如何,在邏輯代碼中執行依賴關係解析並不是一個好主意,您應該在構建過程中注入依賴關係,這在測試中也變得更容易管理。沒有更多的隱藏的依賴關係,您必須「記住」在所有測試中維護它們。 –

+1

[使用Xamarin.Forms的DependencyService進行單元測試](http://arteksoftware.com/unit-testing-with-xamarin-forms-dependencyservice/)[只是一個谷歌](https://www.google。 co.uk/search?q=DependencyService+unit+tests) – stuartd

回答

1

當我在代碼中使用依賴注入時,我使用IoC(Inversion Of Control)來處理在我的生產代碼中創建依賴項,並在我的單元測試中手動創建我的依賴項。

我的主要原因是它是明確的。通常我會使用Mocking框架來創建假實例,所以我不想要額外的複雜性。

關於您的代碼測試的建議,您已將依賴關係交換到您的類,以便依賴於您的DependencyService。我並不是說不使用DependencyService,但可以將依賴關係傳遞給您的類的構造函數。然後你的測試可以傳入一個虛假的實例,生產代碼將使用DependencyService來爲你提供一個IUserDefaults並將其傳入。這將使你的類更容易測試。