2011-10-08 56 views
1

我在Massive類上創建了一個Find方法。問題是我剛剛意識到它始終返回true,因爲結果永遠不會爲空。這是我的代碼:如何在Massive中測試無結果

public dynamic Find(string email) 
    { 
     dynamic result = new ExpandoObject(); 
     dynamic experience = new ExpandoObject(); 
     result.Success = false; 
     experience = this.Query(@"SELECT we.* FROM WorkExperience we 
      LEFT JOIN Members m ON m.Id = we.MemberId 
      WHERE m.Email = @0", email); 
     if (experience != null) 
     { 
      result.Experience = experience; 
      result.Success = true; 
     } 
     return result; 
    } 

在這種情況下,體驗永遠不會爲空,所以result.Success總是會返回爲false。我如何測試this.Query()是否返回記錄或記錄?

回答

1

我這樣做是爲了測試我的查詢是否返回記錄。

控制器:

public ActionResult Index() { 
     _logger.LogInfo("In home"); 
     //var data = _tricksTable.All(orderBy: "DateCreated"); 
     dynamic viewModel = new ExpandoObject(); 
     var data = _tricksTable.Query("SELECT TOP(10) * FROM Tricks ORDER BY DateCreated DESC"); 
     viewModel.TenTricksNewestFirst = data; 

     var data2 = _tricksTable.Query("SELECT TOP(10) * FROM Tricks ORDER BY Votes DESC"); 
     viewModel.TenTricksMostPopularFirst = data2; 
     return View(viewModel); 
    } 

和測試:

[Test] 
    public void a_user_should_be_able_to_view_10_newest_tricks_in_latest_videos_tab() { 
     var result = _controller.Index() as ViewResult; 
     dynamic viewModelExpando = result.ViewData.Model; 
     var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst; 

     var i = Enumerable.Count(queryFromMassiveDynamic); 
     Assert.AreNotEqual(0, i, "TenTricksNewestFirst returned 0 records"); 
     Assert.LessOrEqual(i,10, "Ten Tricks Newest First returned more than 10 tricks"); 
    } 
0

對於未來的答案者的參考,這其實更簡單地完成。不要使用DynamicModel的Query方法,而要調用Scalar方法,並確保選擇a)只有一個值,然後測試結果是否爲null或b)匹配的計數,從中可以將結果轉換爲整數並根據返回的數字進行測試。