From fa2a3282c51d831b25f374803301e75eac15d11c Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Thu, 17 Oct 2019 20:46:57 +0800 Subject: ... --- Timeline.Tests/Helpers/TestApplication.cs | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Timeline.Tests/Helpers/TestApplication.cs (limited to 'Timeline.Tests/Helpers/TestApplication.cs') diff --git a/Timeline.Tests/Helpers/TestApplication.cs b/Timeline.Tests/Helpers/TestApplication.cs new file mode 100644 index 00000000..b0187a30 --- /dev/null +++ b/Timeline.Tests/Helpers/TestApplication.cs @@ -0,0 +1,52 @@ +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using System; +using Timeline.Entities; +using Timeline.Tests.Mock.Data; + +namespace Timeline.Tests.Helpers +{ + public class TestApplication : IDisposable + { + public SqliteConnection DatabaseConnection { get; } = new SqliteConnection("Data Source=:memory:;"); + public WebApplicationFactory Factory { get; } + + public TestApplication(WebApplicationFactory factory) + { + // We should keep the connection, so the database is persisted but not recreate every time. + // See https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite#writing-tests . + DatabaseConnection.Open(); + + { + var options = new DbContextOptionsBuilder() + .UseSqlite(DatabaseConnection) + .Options; + + using (var context = new DatabaseContext(options)) + { + TestDatabase.InitDatabase(context); + }; + } + + Factory = factory.WithWebHostBuilder(builder => + { + builder.ConfigureServices(services => + { + services.AddEntityFrameworkSqlite(); + services.AddDbContext(options => + { + options.UseSqlite(DatabaseConnection); + }); + }); + }); + } + + public void Dispose() + { + DatabaseConnection.Close(); + DatabaseConnection.Dispose(); + } + } +} -- cgit v1.2.3