2014-09-23 72 views
2

使用ReturnsAsync時,我們只能讓它返回一個新的對象。是否有更好/更正確的方式來編寫下面的代碼?Moq使用ReturnsAsync並修改It.IsAny輸入參數

在這個例子中,我們有某種數據存儲,以及我們的實現需要在類型的事情的一個對象都有一個ID(我們要假裝我們的數據庫設置ID)屬性:

var repo = new Mock<IRepositoryOfThings>(); 

//Is there a better way to do this perhaps using ReturnsAsync?? 
repo.Setup(r => r.Add(It.IsAny<Thing>())).Returns(
    (Thing x) => 
    { 
     var tcs = new TaskCompletionSource<Thing>(); 
     x.Id = Guid.NewGuid().ToString(); 
     tcs.SetResult(x); 
     return tcs.Task; 
    }); 

謝謝!

回答

1

這是我能找到的最好:

var repo = new Mock<IRepositoryOfThings>(); 

repo.Setup(r => r.Add(It.IsAny<Thing>())).Returns(
    (Thing x) => 
    { 
     x.Id = Guid.NewGuid().ToString(); 
     return Task.FromResult(x); 
    }); 

這實際上是相同的答案很遺憾。