Jelajahi Sumber

增加单元测试

zuohuaijun 3 tahun lalu
induk
melakukan
56871765f3

+ 8 - 0
Admin.NET/Admin.NET.Application/Service/TestService.cs

@@ -20,6 +20,14 @@ public class TestService : IDynamicApiController, ITransient
         _testRep = testRep;
     }
 
+    /// <summary>
+    /// 测试
+    /// </summary>
+    public string GetName()
+    {
+        return "Furion";
+    }
+
     /// <summary>
     /// 获取列表
     /// </summary>

+ 3 - 3
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -25,9 +25,9 @@
   <ItemGroup>
     <PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
     <PackageReference Include="Caching.CSRedis" Version="3.8.3" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.1.0" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.1.0" />
-    <PackageReference Include="Furion.Pure" Version="4.1.0" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.1.1" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.1.1" />
+    <PackageReference Include="Furion.Pure" Version="4.1.1" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.6.4" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.7" />
     <PackageReference Include="MySql.Data" Version="8.0.29" />

+ 2 - 5
Admin.NET/Admin.NET.Core/AdminNETConfig.json

@@ -49,9 +49,6 @@
   "RefreshToken": {
     "ExpiredTime": 20160 // 过期时间单位分钟(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)
   },
-  "CorsAccessorSettings": {
-    "WithExposedHeaders": [ "access-token", "x-access-token", "Content-Disposition" ]
-  },
   "Cache": {
     "CacheType": "MemoryCache", // RedisCache
     "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=2",
@@ -81,8 +78,8 @@
     "SenderName": "系统邮件", // 发送者名称
     "SenderEmail": "zuohuaijun@163.com", // 发件者邮箱
     "ToEmail": "515096995@qq.com", // 接收人邮箱
-    "Account": "zuohuaijun@163.com", // 发件邮箱账号
-    "Password": "XXXXXXXXXXXXXXXXX", // 发件邮箱密码
+    "Account": "", // 发件邮箱账号
+    "Password": "", // 发件邮箱密码
     "Security": true // 启用SSL和TLS
   }
 }

+ 4 - 3
Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj

@@ -2,14 +2,16 @@
 
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
-    <Nullable>disable</Nullable>
+    <Nullable>enable</Nullable>
 
     <IsPackable>false</IsPackable>
   </PropertyGroup>
 
   <ItemGroup>
+    <PackageReference Include="Furion.Pure.Xunit" Version="4.1.1" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.7" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
-    <PackageReference Include="xunit" Version="2.4.2-pre.12" />
+    <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
       <PrivateAssets>all</PrivateAssets>
@@ -21,7 +23,6 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
     <ProjectReference Include="..\Admin.NET.Web.Core\Admin.NET.Web.Core.csproj" />
   </ItemGroup>
 

+ 0 - 77
Admin.NET/Admin.NET.UnitTest/Helper/TestUserManager.cs

@@ -1,77 +0,0 @@
-using Admin.NET.Core;
-using Furion.FriendlyException;
-using System.Threading.Tasks;
-
-namespace Admin.NET.UnitTest
-{
-    /// <summary>
-    /// 模拟用户管理
-    /// </summary>
-    public class TestUserManager : IUserManager
-    {
-        /// <summary>
-        /// 测试用户
-        /// </summary>
-        public static string TestUserName { get; set; } = "admin";
-
-        private SysUser user;
-
-        private long userId;
-
-        private readonly SqlSugarRepository<SysUser> _sysUserRep;
-
-        public TestUserManager(SqlSugarRepository<SysUser> sysUserRep)
-        {
-            _sysUserRep = sysUserRep;
-        }
-
-        /// <summary>
-        /// 用户ID
-        /// </summary>
-        public long UserId => userId;
-
-        /// <summary>
-        /// 用户名
-        /// </summary>
-        public string UserName => user.UserName;
-
-        /// <summary>
-        /// 真实名
-        /// </summary>
-        public string RealName => user.RealName;
-
-        /// <summary>
-        /// 是否超级管理员
-        /// </summary>
-        public bool SuperAdmin => true;
-
-        /// <summary>
-        /// OPENID
-        /// </summary>
-        public string OpenId => userId.ToString();
-
-        /// <summary>
-        /// 用户详细信息
-        /// </summary>
-        public SysUser User => user;
-
-        /// <summary>
-        /// 获取用户信息
-        /// </summary>
-        /// <param name="userId"></param>
-        /// <returns></returns>
-        public async Task<SysUser> CheckUserAsync(long userId)
-        {
-            if (user == null)
-            {
-                user = await _sysUserRep.GetFirstAsync(u => u.UserName == TestUserName);
-                if (user != null)
-                {
-                    this.userId = user.Id;
-                    return user;
-                }
-            }
-            return user ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        }
-    }
-}

+ 21 - 0
Admin.NET/Admin.NET.UnitTest/Program.cs

@@ -0,0 +1,21 @@
+using Furion.Xunit;
+using System;
+using Xunit;
+using Xunit.Abstractions;
+
+// 配置启动类类型,第一个参数是 Startup 类完整限定名,第二个参数是当前项目程序集名称
+[assembly: TestFramework("Admin.NET.UnitTest.Program", "Admin.NET.UnitTest")]
+
+namespace Admin.NET.UnitTest;
+
+/// <summary>
+/// 单元测试启动类
+/// </summary>
+internal class Program : TestStartup
+{
+    public Program(IMessageSink messageSink) : base(messageSink)
+    {
+        // 初始化 Furion
+        Serve.Run(silence: true);
+    }
+}

+ 0 - 32
Admin.NET/Admin.NET.UnitTest/SqlSugarTest.cs

@@ -1,32 +0,0 @@
-using Admin.NET.Application.Serice;
-using Admin.NET.Core;
-using Furion;
-using Xunit;
-
-namespace Admin.NET.UnitTest
-{
-    public class SqlSugarTest
-    {
-        private readonly TestService testService;
-
-        public SqlSugarTest()
-        {
-            testService = App.GetService<TestService>();
-        }
-
-        [Fact]
-        public async void Test1()
-        {
-            var page = await testService.GetTestList();
-            Assert.True(page.Count > 0);
-        }
-
-        [Fact]
-        public async void Test2()
-        {
-            var userManager = App.GetService<IUserManager>();
-            var user = await userManager.CheckUserAsync(0);
-            Assert.NotNull(user);
-        }
-    }
-}

+ 10 - 23
Admin.NET/Admin.NET.UnitTest/Startup.cs

@@ -1,32 +1,19 @@
-using Admin.NET.Core;
 using Furion;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.DependencyInjection;
-using Xunit;
-using Xunit.Abstractions;
-using Xunit.Sdk;
 
-// 配置启动类类型,第一个参数是 Startup 类完整限定名,第二个参数是当前项目程序集名称
-[assembly: TestFramework("Admin.NET.UnitTest.Startup", "Admin.NET.UnitTest")]
+namespace Admin.NET.UnitTest;
 
-namespace Admin.NET.UnitTest
+public sealed class Startup : AppStartup
 {
-    /// <summary>
-    /// 单元测试启动类
-    /// </summary>
-    /// <remarks>在这里可以使用 Furion 几乎所有功能</remarks>
-    public sealed class Startup : XunitTestFramework
+    public void ConfigureServices(IServiceCollection services)
     {
-        public Startup(IMessageSink messageSink) : base(messageSink)
-        {
-            // 初始化 IServiceCollection 对象
-            var services = Inject.Create();
-
-            // 在这里可以和 .NET Core 一样注册服务了!!!
-
-            services.AddScoped<IUserManager, TestUserManager>();
+        //// 注册远程服务
+        //services.AddRemoteRequest();
+    }
 
-            // 构建 ServiceProvider 对象
-            services.Build();
-        }
+    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+    {
     }
 }

+ 51 - 0
Admin.NET/Admin.NET.UnitTest/UnitTest1.cs

@@ -0,0 +1,51 @@
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Admin.NET.UnitTest;
+
+/// <summary>
+/// 单元测试
+/// </summary>
+public class UnitTest1
+{
+    private readonly ITestOutputHelper _output; // 日志记录
+
+    public UnitTest1(ITestOutputHelper output)
+    {
+        _output = output;
+    }
+
+    [Fact]
+    public void Test1()
+    {
+        Assert.Equal(2, 1 + 1);
+    }
+
+    [Fact]
+    public void 测试日志()
+    {
+        _output.WriteLine("哈哈哈哈,我是 Furion");
+        Assert.NotEqual("Furion", "Fur");
+    }
+
+    /// <summary>
+    /// 带参数(奇数判断)
+    /// </summary>
+    /// <param name="i"></param>
+    /// <param name="j"></param>
+    [Theory]
+    [InlineData(1, 2)]
+    [InlineData(3, 4)]
+    [InlineData(5, 7)]
+    public void 带参数测试(int i, int j)
+    {
+        Assert.NotEqual(0, (i + j) % 2);
+    }
+
+    //[Fact]
+    //public async Task 测试请求百度()
+    //{
+    //    var rep = await "https://www.baidu.com".GetAsync();
+    //    Assert.True(rep.IsSuccessStatusCode);
+    //}
+}

+ 24 - 0
Admin.NET/Admin.NET.UnitTest/UnitTest2.cs

@@ -0,0 +1,24 @@
+using Admin.NET.Application.Serice;
+using Xunit;
+
+namespace Admin.NET.UnitTest;
+
+/// <summary>
+/// 单元测试
+/// </summary>
+public class UnitTest2
+{
+    private readonly TestService _testService;
+
+    public UnitTest2(TestService testService)
+    {
+        _testService = testService;
+    }
+
+    [Fact]
+    public void 测试接口()
+    {
+        var res = _testService.GetName();
+        Assert.Equal("Furion1", res);
+    }
+}

+ 30 - 0
Admin.NET/Admin.NET.UnitTest/UnitTest3.cs

@@ -0,0 +1,30 @@
+//using Microsoft.AspNetCore.Mvc.Testing;
+//using System.Threading.Tasks;
+//using Xunit;
+
+//namespace Admin.NET.UnitTest;
+
+///// <summary>
+///// 集成测试
+///// </summary>
+//public class UnitTest3 : IClassFixture<WebApplicationFactory<Admin.NET.Web.Entry.FakeStartup>>
+//{
+//    private readonly WebApplicationFactory<Admin.NET.Web.Entry.FakeStartup> _factory;
+
+//    public UnitTest2(WebApplicationFactory<Admin.NET.Web.Entry.FakeStartup> factory)
+//    {
+//        _factory = factory;
+//    }
+
+//    [Theory]
+//    [InlineData("/test/get")]
+//    public async Task 测试接口2(string url)
+//    {
+//        using var client = _factory.CreateClient();
+//        using var response = await client.GetAsync(url);
+//        response.EnsureSuccessStatusCode();
+
+//        var result = await response.Content.ReadAsStringAsync();
+//        Assert.Contains("Furion", result);
+//    }
+//}

+ 8 - 0
Admin.NET/Admin.NET.Web.Entry/FakeStartup.cs

@@ -0,0 +1,8 @@
+namespace Admin.NET.Web.Entry;
+
+/// <summary>
+/// 供集成测试使用
+/// </summary>
+public class FakeStartup
+{
+}