我試圖用NSubstitute來模擬替代品的返回值,但我無法獲得替代品以返回正確的值,因爲方法簽名使用的是Func。Func與NSubstitute的模擬結果
我見過這些問題,但無法使它與我的Func一起工作。
Mocking Action<T> with NSubstitute
Mocking out expression with NSubstitute
我試圖嘲弄的接口是這個(有點simplyfied):
public interface IOrgTreeRepository<out T> where T : IHierarchicalUnit
{
T FirstOrDefault(Func<T, bool> predicate);
}
我與NSubstitute取代它像這樣:
_orgTreeRepository = Substitute.For<IOrgTreeRepository<IOrganizationUnit>>();
然後我嘗試改變返回v區實習像這樣:
_orgTreeRepository.FirstOrDefault(Arg.Is<Func<IOrganizationUnit, bool>>(x => x.Id== _itemsToUpdate[0].Id)).Returns(existingItems[0]);
但它只是返回一個代理對象,而不是在existingItems我定義的對象。
但是,由於其他問題,我設法使這個工作,但它並沒有幫助我,因爲我每次都需要一個特定的項目。
_orgTreeRepository.FirstOrDefault(Arg.Any<Func<IOrganizationUnit, bool>>()).Returns(existingItems[0]); // Semi-working
我想這是治療lambda表達式作爲一種絕對參考,因此跳過它?有什麼辦法可以嘲笑返回值嗎?
那麼,這是一個很好的解決我的問題。非常感謝。 – smoksnes
我從來沒有猜到過!萬分感謝。 – Invvard