2015-02-09 44 views
0

我正在嘗試爲移動服務.net後端編寫單元測試。UnitTest Mobile Service TableController

我已經使用Effort創建了一個模擬數據庫上下文。

但我真的不知道如何初始化表控制器來測試它。

我想這個小單元測試:

[TestClass] 
public class UnitTest1 
{ 
    private MobileServiceContext _context = null; 
    private GroupController _controller = null; 

    [TestInitialize] 
    public void SetupTest() 
    { 
     DbConnection connection = Effort.DbConnectionFactory.CreateTransient(); 
     _context = new MobileServiceContext(connection); 

     _controller = new GroupController(_context); 
    } 

    [TestMethod] 
    public void TestGetAll() 
    { 
     var result = _controller.GetAccessibleGroups(); 
    } 
} 

的GetAccessibleGroups方法仍處於默認狀態:

public class GroupController : TableController<Group> 
{ 
//... 
    public IQueryable<Group> GetAccessibleGroups() 
    { 
     return Query(); 
    } 

但它在獲取方法調用查詢()時失敗的NullReferenceException;

我如何初始化控制器,所以我沒有得到一個NullReferenceException?

+0

你可以發佈'_controller.GetAccessibleGroups();'的代碼嗎? – DixonD 2015-02-10 07:29:10

+0

當然,我將它添加到問題中。但它仍處於默認狀態。 – lapayo 2015-02-10 09:04:35

+0

.NET移動服務只是一個自定義的Web API,因此您應該可以使用如下測試技術:http://www.asp.net/web-api/overview/testing-and-debugging/unit-testing -controllers-in-web-api – 2015-02-18 08:06:50

回答

0

男人,這是一個古老的答案,但這應該可以解決你的問題! 我剛剛開發了一個通用的解決方案,以單元測試TableControllers。

首先你必須處理設置,這隻能通過DomainManager初始化tablecontroller完成。

你可以在你的控制器中添加下面的方法:

public void SetDomainManager(EntityDomainManager<TModel> domainManager) 
    { 
     DomainManager = domainManager; 
    } 

然後在你的代碼

public class UnitTest1 
{ 
private MobileServiceContext _context = null; 
private GroupController _controller = null; 

[TestInitialize] 
public void SetupTest() 
{ 
    DbConnection connection = Effort.DbConnectionFactory.CreateTransient(); 
    _context = new MobileServiceContext(connection); 
    _controller = new GroupController(); 
    _controller.SetDomainManager(new EntityDomainManager<Group>(_context, _controller.Request)); 
} 

[TestMethod] 
public void TestGetAll() 
{ 
    var result = _controller.GetAccessibleGroups(); 
} 

}

我相信,使用此代碼,您應該能單位測試你的TableController。也可以觀看我的通用解決方案清潔劑,並可應用於任何控制器。我會離開你我的解決方案的鏈接:TableControllers Unit test