我在moq中遇到了一個非常奇怪的行爲,我無法理解它是一個錯誤還是我做錯了什麼。這裏是這樣的例子:Moq對於不同的IEnumberable參數設置返回相同的結果
List<CustomerDataTransaction> transactions0 = GetTransactionsSomehow();
List<CustomerDataTransaction> transactions1 = GetTransactionsSomehow();
var portfolioTransactions0 = new List<IPortfolioTransaction>();
var portfolioTransactions1 = new List<IPortfolioTransaction>();
m_TransactionMapperMock
.Setup(m => m.CreatePortfolioTransactions(transactions0))
.Returns(portfolioTransactions0);
m_TransactionMapperMock
.Setup(m => m.CreatePortfolioTransactions(transactions1))
.Returns(portfolioTransactions1);
我已經檢查過transaction0不等於transactions1,所以它肯定是不同的列表。但是,當用不同的參數(transactions0和transactions1)調用時,模擬會返回兩次portfolioTransactions1。我試圖找出什麼是錯的,但我沒有找到任何理由。然後,我爲每個列表添加了虛擬元素,並已修復它,模擬開始按照計劃返回不同的值。這是模擬的錯誤還是我沒有得到什麼?據我所知,列表中的值不應該影響它。
P.S.我不知道這是否是重要的或沒有,但該方法接受IEnumberable<CustomerDataTransaction>
我認爲對於moq參數比較器來說,一個空列表等於另一個相同類型的空列表。所以它只在列表中有東西時才起作用。 – nemesv
出於好奇,如果使用It.Is會發生什麼情況。對不起,我不在IDE –
NinjaNye
看起來他們對IEnumerable有特殊的處理,而空對象的處理方式是一樣的,儘管它看起來更像是一個bug,而不是一個功能。 –