我是 Moq 的新手,目前,問題是當我嘗試獲取物件的集合(例如 WebStore)時,它按預期作業,但是當我嘗試從中獲取單個物件時,卻沒有按預期作業,
你能指導我如何從存盤庫中獲取單個物件嗎
private Mock<WebStore> _webstore;
[SetUp]
public void SetUp()
{
...
_unitOfWork = new Mock<IUnitOfWork>();
_webstore = new Mock<WebStore>();
...
}
方法
public WebStore GetAllWebstore()
{
var webstoreDat = unitOfWork.GetRepository<WebStore>().GetAll();
return webstoreData;
}
public WebStore GetWebstorebyId(int webstoreId)
{
var webstoreData = unitOfWork.GetRepository<WebStore>()
.Get(store => store.WebStoreId == webstoreId).FirstOrDefault();
return webstoreData;
}
測驗方法
[Test]
public void GetWebstore_All()
{
//
var webStoreId = 1;
var customerName = "A";
var listWebstore = new List<WebStore>() { new WebStore { WebStoreId = webStoreId, CustomerName = customerName } };
var webstore = new WebStore { WebStoreId = webStoreId, CustomerName = customerName };
//Set up Mock
_unitOfWork.Setup(uow => uow.GetRepository<WebStore>().GetAll()).Returns(listWebstore); // working
...
}
[Test]
public void GetWebstore_GetSingle()
{
//
var webStoreId = 1;
var customerName = "A";
var listWebstore = new List<WebStore>() { new WebStore { WebStoreId = webStoreId, CustomerName = customerName } };
var webstore = new WebStore { WebStoreId = webStoreId, CustomerName = customerName };
//Set up Mock
_unitOfWork.Setup(uow => uow.GetRepository<WebStore>()
.Get(store => store.WebStoreId == webStoreId, null, "", 0, 0).FirstOrDefault()).Returns(webstore); **//Not working**
...
}
uj5u.com熱心網友回復:
有兩件事需要修復:
模擬Get方法
如果你GetWebstorebyId像這樣重寫你的方法:
var webstoreData = unitOfWork.GetRepository<WebStore>()
.Get(store => store.WebStoreId == webstoreId);
return webstoreData.FirstOrDefault();
那么很明顯你應該嘲笑Get而不是Get FirstOrDefault
It.IsAny在設定期間使用
因為您的模擬不依賴傳入引數,這就是為什么您不需要在設定期間將其指定為具體值的原因。
_unitOfWork
.Setup(uow => uow.GetRepository<WebStore>().Get(It.IsAny<int>()))
.Returns(listWebstore);
有了這個,您已經設定了您的Get方法,它將接收一個int(值無關緊要)并回傳一個WebStore物件集合。
在FirstOrDefault將在模擬回傳值呼叫。
uj5u.com熱心網友回復:
謝謝大家,非常感謝,@PeterCsala,通過使用It.IsAny, 它可以按預期作業,
_unitOfWork.Setup(x => x.GetRepository<WebStore>() .Get(It.IsAny<Expression<Func<WebStore, bool>>>(), It.IsAny<Func<IQueryable<WebStore>, IOrderedQueryable<WebStore>>>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())).Returns(listWebstore);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343237.html
