diff --git a/test/UnitTest/Components/ButtonTest.cs b/test/UnitTest/Components/ButtonTest.cs index eef1dcfc8df..419d989abd4 100644 --- a/test/UnitTest/Components/ButtonTest.cs +++ b/test/UnitTest/Components/ButtonTest.cs @@ -8,7 +8,7 @@ namespace UnitTest.Components; -public class ButtonTest : BootstrapBlazorTestBase +public class ButtonTest : BootstrapBlazorButtonTestBase { [Fact] public void ButtonStyle_Ok() diff --git a/test/UnitTest/Core/BootstrapBlazorButtonTestBase.cs b/test/UnitTest/Core/BootstrapBlazorButtonTestBase.cs new file mode 100644 index 00000000000..99b9c32041b --- /dev/null +++ b/test/UnitTest/Core/BootstrapBlazorButtonTestBase.cs @@ -0,0 +1,92 @@ +// Copyright (c) Argo Zhang (argo@163.com). All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Website: https://www.blazor.zone or https://argozhang.github.io/ + +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace UnitTest.Core; + +[Collection("BlazorButtonTestContext")] +public class BootstrapBlazorButtonTestBase +{ + protected TestContext Context { get; } + + protected ICacheManager Cache { get; } + + public BootstrapBlazorButtonTestBase() + { + Context = BootstrapBlazorButtonTestHost.Instance; + Cache = BootstrapBlazorButtonTestHost.Cache; + } +} + +[CollectionDefinition("BlazorButtonTestContext")] +public class BootstrapBlazorButtonTestCollection : ICollectionFixture +{ + +} + +public class BootstrapBlazorButtonTestHost : IDisposable +{ + [NotNull] + internal static TestContext? Instance { get; private set; } + + [NotNull] + internal static ICacheManager? Cache { get; private set; } + + public BootstrapBlazorButtonTestHost() + { + Instance = new TestContext(); + + // Mock 脚本 + Instance.JSInterop.Mode = JSRuntimeMode.Loose; + + ConfigureServices(Instance.Services); + + ConfigureConfiguration(Instance.Services); + + // 渲染 BootstrapBlazorRoot 组件 激活 ICacheManager 接口 + Cache = Instance.Services.GetRequiredService(); + } + + protected virtual void ConfigureServices(IServiceCollection services) + { + services.AddBootstrapBlazor(); + services.ConfigureJsonLocalizationOptions(op => + { + op.IgnoreLocalizerMissing = false; + }); + services.AddSingleton(); + } + + protected virtual void ConfigureConfiguration(IServiceCollection services) + { + // 增加单元测试 appsettings.json 配置文件 + services.AddConfiguration(); + } + + public void Dispose() + { + Instance.Dispose(); + GC.SuppressFinalize(this); + } + + class FooLookupService : LookupServiceBase + { + public override IEnumerable? GetItemsByKey(string? key, object? data) + { + IEnumerable? ret = null; + + if (key == "FooLookup") + { + ret = new SelectedItem[] + { + new("v1", "LookupService-Test-1"), + new("v2", "LookupService-Test-2") + }; + } + return ret; + } + } +}