using Bootstrap.DataAccess; using Longbow.Data; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using PetaPoco; using System; using System.Collections.Generic; using System.IO; namespace UnitTest { public static class TestHelper { /// /// 获得当前工程解决方案目录 /// /// public static string RetrieveSolutionPath() { var dirSeparator = Path.DirectorySeparatorChar; var paths = AppContext.BaseDirectory.SpanSplit($"{dirSeparator}.vs{dirSeparator}"); return paths.Count > 1 ? paths[0] : Path.Combine(AppContext.BaseDirectory, $"..{dirSeparator}..{dirSeparator}..{dirSeparator}..{dirSeparator}"); } /// /// /// /// /// public static string RetrievePath(string folder) { var soluFolder = RetrieveSolutionPath(); return Path.Combine(soluFolder, folder); } public static void ConfigureWebHost(IWebHostBuilder builder, DatabaseProviderType providerName = DatabaseProviderType.SqlServer) { if (providerName == DatabaseProviderType.SQLite) { var dbPath = RetrievePath($"UnitTest{Path.DirectorySeparatorChar}DB{Path.DirectorySeparatorChar}UnitTest.db"); var dbFile = Path.Combine(AppContext.BaseDirectory, "UnitTest.db"); File.Copy(dbPath, dbFile, true); builder.ConfigureAppConfiguration(app => app.AddInMemoryCollection(new KeyValuePair[] { new KeyValuePair("DB:0:Enabled", "false"), new KeyValuePair("DB:1:Enabled", "true") })); } if (providerName == DatabaseProviderType.MySql) { builder.ConfigureAppConfiguration(app => app.AddInMemoryCollection(new KeyValuePair[] { new KeyValuePair("DB:0:Enabled", "false"), new KeyValuePair("DB:1:Enabled", "false"), new KeyValuePair("DB:2:Enabled", "true") })); } if (providerName == DatabaseProviderType.Npgsql) { builder.ConfigureAppConfiguration(app => app.AddInMemoryCollection(new KeyValuePair[] { new KeyValuePair("DB:0:Enabled", "false"), new KeyValuePair("DB:1:Enabled", "false"), new KeyValuePair("DB:2:Enabled", "false"), new KeyValuePair("DB:3:Enabled", "true") })); } } /// /// /// /// /// public static void RevokeMapper(Action callback) { var t = typeof(App); var map = Mappers.GetMapper(t, null); Mappers.Revoke(map); var foo = new FooMapper(); Mappers.Register(t.Assembly, foo); try { callback(); } catch (Exception ex) { throw ex; } finally { Mappers.Revoke(foo); Mappers.Register(t.Assembly, map); } } public static void RevokePocoMapper(Action callback) { var foo = new FooMapper(); Mappers.Register(typeof(T), foo); try { callback(); } catch (Exception ex) { throw ex; } finally { Mappers.Revoke(foo); } } private class FooMapper : ConventionMapper { public override TableInfo GetTableInfo(Type pocoType) => throw new Exception(); } } }