2013-08-06 35 views
1

嗨有可能moq這樣的東西。我正在使用MVC模式,並且正在測試我的控制器層。我已經在我的Service層中測試了getListForId方法,所以我可以相信它會返回正確的值。當你使用Nunit的時候,你可以使用哪個Claus

public List<object> getListForID(int id) 

我用它這樣

if(true) 
{ 
    getListForID(1).Where(a => a.Id == objectB.Id) 
} 
else 
{ 
    getListForID(1) 
} 

的代碼測試每個路徑甚至會壽存在真正的路徑,其中相同的。

是否有可能驗證該方法是用where子句調用的? 這樣做有什麼價值嗎?

+0

你想做什麼? where語句會給你返回任何getListForID的部分列表。 – Artless

+2

我會說沒有意義。你應該測試結果,而不是實現方式。 –

+0

我只是想知道是否有一種方法來檢查在哪裏被調用。我將編輯我的問題以提供更清晰的示例 –

回答

3

你應該測試一個行爲,而不是實現。如果您已經測試了服務層,那麼對於您的控制器測試,您應該模擬服務層,並使getById返回具有可能值的對象列表,然後測試該列表是否被正確過濾:

(僞代碼如下)

// arrange 
var serviceOutput = new List<MyEntity> 
{ 
    new MyEntity{Id = 1}, 
    new MyEntity{Id = 2} 
} 
var mockService = new Mock<IMyService>(); 
mockService.Setup(s=>s.GetById(1)).Returns(serviceOutput); 

var lookupObject = new MyEntity{Id = 1}; 

var testController = new MyController(mockService.Object); 

// act 
var result = controller.FindSimilar(lookupObject); 

// assert 
result.Should().Have.Count().EqualTo(1); 
result[0].Should().Be.SameInstanceAs(serviceOutput[0]); 
相關問題