使用Moq來模擬一個方法的最簡潔的方法是什麼?它會在第一次調用時拋出異常,然後第二次調用它叫做?Moq:設置一個模擬方法在第一次調用時失敗,在第二次調用後成功
27
A
回答
39
我會利用Callback
,並增加一個計數器,以確定是否要由Callback
拋出異常。
[Test]
public void TestMe()
{
var count = 0;
var mock = new Mock<IMyClass>();
mock.Setup(a => a.MyMethod()).Callback(() =>
{
count++;
if(count == 1)
throw new ApplicationException();
});
Assert.Throws(typeof(ApplicationException),() => mock.Object.MyMethod());
Assert.DoesNotThrow(() => mock.Object.MyMethod());
}
public interface IMyClass
{
void MyMethod();
}
16
,我已經拿出了迄今爲止最好的是這樣的:
interface IFoo
{
void Bar();
}
[Test]
public void TestBarExceptionThenSuccess()
{
var repository = new MockRepository(MockBehavior.Default);
var mock = repository.Create<IFoo>();
mock.Setup(m => m.Bar()).
Callback(() => mock.Setup(m => m.Bar())). // Setup() replaces the initial one
Throws<Exception>(); // throw an exception the first time
...
}
5
3
從Moq 4.2開始,您可以使用內置方法SetupSequence()
(如@RichardBarnett評論所述)。
實施例:
var mock = new Mock<IMyClass>();
mock.SetupSequence(x => x.MyMethod("param1"))
.Throws<MyException>()
.Returns("test return");
相關問題
- 1. 模擬第一次通話失敗,第二次通話成功
- 2. Bigquery Query第一次失敗併成功完成第二次
- 3. 調用perror()第一次成功,第二次返回ILLEGAL SEEK?
- 4. jquery在完成一次後調用第二次自動完成
- 5. 第一次更新失敗,第二次成功
- 6. Asp.Net假冒第一次嘗試但第二次成功失敗
- 7. 使隱式規則第一次失敗,但第二次成功
- 8. 啓用第二次微調一次第一次微調 - Android
- 9. react:在第二次調用componentWillRecieveProps之後運行一個方法
- 10. dispatch_group_notify在第二次完成調用後
- 11. EasyMock模擬方法調用在重置模擬對象後第二次調用時返回null
- 12. POST函數運行兩次,第一次API調用失敗,第二次運行。
- 13. 第二次調用Sub時,選擇Range類的方法失敗
- 14. Jtable requestFocusInWindow第二次調用失敗
- 15. 第二次調用JQuery腳本失敗
- 16. Swift 3 NSMutableURLRequest第二次調用失敗
- 17. traitCollectionDidChange第二次調用失敗
- 18. RxBluetoothkit調用retrievePeripherals失敗,第二次
- 19. 加載一個模塊失敗了第一次load()被調用,但成功
- 20. 首次點擊失敗,第二次點擊在Ajax調用上成功•JQuery/PHP
- 21. 如何在第一次執行後調用第二個函數?
- 22. chrome.hid.send在第二次使用時失敗
- 23. 使用WordPress,在同一頁面上調用兩次函數失敗,第二次
- 24. xmlReaderForMemory在第二次調用
- 25. 調用第一個HTTP調用後第二HTTP調用完成
- 26. JAVA - 方法適用於第一次調用,但不適用於第二次
- 27. 第一次運行失敗,第二次在Asynctask中工作
- 28. iPhone應用程序構建第一次失敗,甚至在「清除所有目標」後第二次成功
- 29. 設計認證失敗的第一次嘗試,成功後
- 30. 春季安全第一次登錄失敗,第二次登錄成功
Moq的4.2&更高現在通過'SetupSequence支持該()'。 –