ISomething使用方法模擬介面Task<List<int>> GetIdsAsync(int)我可以執行以下操作以使用引數生成回傳:
mock.Setup(x => x.GetIdsAsync(It.IsAny<int>()))
.ReturnsAsync((int n) => new List<int>(n));
我還可以模擬拋出例外的方法:
mock.Setup(x => x.GetIdsAsync(It.IsAny<int>()))
.ThrowsAsync(new InvalidOperationException());
但我實際上想throw new InvalidOperationException($"{n} is not valid");使用輸入引數在例外中生成錯誤訊息。
我無法弄清楚這個語法是什么,當然假設它是可能的?
我試過了:
mock.Setup(x => x.GetIdsAsync(It.IsAny<int>()))
.ThrowsAsync((int n) => new InvalidOperationException($"{n} is not valid"));
這似乎是合理的,但給出了一個有點復雜的錯誤
CS1929 'ISetup<ISomething, Task<List<int>>>' does not contain a
definition for 'ThrowsAsync' and the best extension method overload
'SequenceExtensions.ThrowsAsync(ISetupSequentialResult<Task>,
Exception)' requires a receiver of type 'ISetupSequentialResult<Task>'
uj5u.com熱心網友回復:
截至這個答案,目前沒有ThrowsAsync類似的價值函式ReturnsAsync。都取Exception為論據。
一種解決方法是創建一個區域變數,在回呼中捕獲輸入引數并在 throw 中使用它。
//...
int n = 0;
mock
.Setup(_ => _.GetIdsAsync(It.IsAny<int>()))
.Callback((int arg) => n = arg)
.ThrowsAsync(new InvalidOperationException($"{n} is not valid"));
//...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530680.html
標籤:C#单元测试起订量
上一篇:在測驗中如何正確使用反向?
