public async Task DoWorkAsync_ExceptionInFinally_Async() { // Arrange var loggerMock = new Mock <ILogger>(); var invokedOnce = false; var wuMock = new Mock <IWorkUnit <ScaffoldingStateModel> >(); var instance = new AsyncExecutorBaseTestImplementation(loggerMock.Object, () => { if (invokedOnce) { return(null); } invokedOnce = true; return(wuMock.Object); }); var project = new SqlProject("a", "b", "c"); var configuration = ConfigurationModel.GetDefault(); var targetVersion = new Version(1, 0); var stateList = new List <bool>(); Task HandlerFunc(bool b) { stateList.Add(b); if (stateList.Count == 2) { throw new Exception("test exception"); } return(Task.CompletedTask); } var model = new ScaffoldingStateModel(project, configuration, targetVersion, HandlerFunc); var cts = new CancellationTokenSource(); // Act await instance.CallDoWorkAsync(model, cts.Token); // Assert Assert.IsTrue(model.Result); Assert.AreEqual(2, stateList.Count); Assert.IsTrue(stateList[0]); Assert.IsFalse(stateList[1]); wuMock.Verify(m => m.Work(model, cts.Token), Times.Once); loggerMock.Verify(m => m.LogInfoAsync("started"), Times.Once); loggerMock.Verify(m => m.LogInfoAsync("Creation was canceled by the user."), Times.Never); loggerMock.Verify(m => m.LogInfoAsync(It.Is <string>(s => s.StartsWith("completed stateModel in"))), Times.Once); }
public async Task DoWorkAsync_PreviousUnitFailed_Async() { // Arrange var loggerMock = new Mock <ILogger>(); var instance = new AsyncExecutorBaseTestImplementation(loggerMock.Object, () => { Assert.Fail("This shouldn't be called"); return(null); }); var project = new SqlProject("a", "b", "c"); var configuration = ConfigurationModel.GetDefault(); var targetVersion = new Version(1, 0); var stateList = new List <bool>(); Task HandlerFunc(bool b) { stateList.Add(b); return(Task.CompletedTask); } var model = new ScaffoldingStateModel(project, configuration, targetVersion, HandlerFunc) { Result = false }; // Act await instance.CallDoWorkAsync(model, CancellationToken.None); // Assert Assert.IsFalse(model.Result); Assert.AreEqual(2, stateList.Count); Assert.IsTrue(stateList[0]); Assert.IsFalse(stateList[1]); loggerMock.Verify(m => m.LogInfoAsync("started"), Times.Once); loggerMock.Verify(m => m.LogInfoAsync("Creation was canceled by the user."), Times.Never); loggerMock.Verify(m => m.LogInfoAsync(It.Is <string>(s => s.StartsWith("completed stateModel in"))), Times.Once); }