diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/ArticleRepositoryTests.cs b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/ArticleRepositoryTests.cs index 8da983153a..38f4c45f0f 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/ArticleRepositoryTests.cs +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/ArticleRepositoryTests.cs @@ -1,5 +1,8 @@ +using MockAsynchronousMethods.Repository.DbModels; using MockAsynchronousMethods.Repository.Tests.Mock; using MockAsynchronousMethods.Tests.Mock; +using Moq; +using System; using System.Linq; using System.Threading.Tasks; using Xunit; @@ -19,6 +22,7 @@ public async Task GivenAMockedDatabase_WhenRequestingAnExistingArticleAsynchrono Assert.NotNull(result); Assert.Equal(FakeDb.Articles.First(), result); + mockArticleRepository.Verify(x => x.GetByIdAsync(1), Times.Once); } [Fact] @@ -45,5 +49,19 @@ public async Task GivenAMockedDatabase_WhenRequestingAListOfArticleAsynchronousl Assert.NotNull(result); Assert.True(result.Any()); } + + [Fact] + public async Task GivenAMockedDatabase_WhenSavingAnArticleAsynchronously_ThenTheSaveCompletes() + { + var mockArticleRepository = new FakeDbArticleMock() + .SaveAsync(); + + var articleRepository = new ArticleRepository(mockArticleRepository.Object); + var article = new ArticleDbModel { Id = 4, Title = "Fourth Article", LastUpdate = DateTime.Now }; + + await articleRepository.SaveArticleAsync(article); + + mockArticleRepository.Verify(x => x.SaveAsync(article), Times.Once); + } } } \ No newline at end of file diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/Mock/FakeDbArticleMock.cs b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/Mock/FakeDbArticleMock.cs index e028655211..71569e0e47 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/Mock/FakeDbArticleMock.cs +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/Mock/FakeDbArticleMock.cs @@ -3,6 +3,7 @@ using MockAsynchronousMethods.Tests.Mock; using Moq; using System.Linq; +using System.Threading.Tasks; namespace MockAsynchronousMethods.Repository.Tests.Mock { @@ -31,5 +32,13 @@ public FakeDbArticleMock GetAllAsync() return this; } + + public FakeDbArticleMock SaveAsync() + { + Setup(x => x.SaveAsync(It.IsAny())) + .Returns(Task.CompletedTask); + + return this; + } } } diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/MockAsynchronousMethods.Tests.csproj b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/MockAsynchronousMethods.Tests.csproj index f2aa4eabf1..e6df821fb0 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/MockAsynchronousMethods.Tests.csproj +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods.Tests/MockAsynchronousMethods.Tests.csproj @@ -1,21 +1,22 @@  - net6.0 + net10.0 enable false + true - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/ArticleRepository.cs b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/ArticleRepository.cs index e422c81dd4..d31db8afa9 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/ArticleRepository.cs +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/ArticleRepository.cs @@ -21,5 +21,10 @@ public async Task> GetAllArticlesAsync() { return await _fakeDbArticle.GetAsync(); } + + public Task SaveArticleAsync(ArticleDbModel article) + { + return _fakeDbArticle.SaveAsync(article); + } } } \ No newline at end of file diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/FakeDatabase/FakeDbArticles.cs b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/FakeDatabase/FakeDbArticles.cs index 8e43a207eb..d3c4572004 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/FakeDatabase/FakeDbArticles.cs +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/FakeDatabase/FakeDbArticles.cs @@ -43,5 +43,12 @@ public async Task> GetAsync() { return await Task.FromResult(_articles.FirstOrDefault(x => x.Id == id)); } + + public Task SaveAsync(ArticleDbModel article) + { + _articles.Add(article); + + return Task.CompletedTask; + } } } diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IArticleRepository.cs b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IArticleRepository.cs index ee8082e7a2..d7b56d2d15 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IArticleRepository.cs +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IArticleRepository.cs @@ -6,5 +6,6 @@ public interface IArticleRepository { Task GetArticleAsync(int id); Task> GetAllArticlesAsync(); + Task SaveArticleAsync(ArticleDbModel article); } } diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IFakeDbArticles.cs b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IFakeDbArticles.cs index e6a42ec499..48038a0dea 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IFakeDbArticles.cs +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/Interfaces/IFakeDbArticles.cs @@ -6,5 +6,6 @@ public interface IFakeDbArticles { Task> GetAsync(); Task GetByIdAsync(int id); + Task SaveAsync(ArticleDbModel article); } } diff --git a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/MockAsynchronousMethods.Repository.csproj b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/MockAsynchronousMethods.Repository.csproj index 132c02c59c..9ed914b5ba 100644 --- a/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/MockAsynchronousMethods.Repository.csproj +++ b/dotnet-testing/MockAsynchronousMethods/MockAsynchronousMethods/MockAsynchronousMethods.Repository.csproj @@ -1,7 +1,7 @@ - net6.0 + net10.0 enable enable