单元测试

main
wanggaofeng 9 months ago
parent 7f8de25ad4
commit 22e533e171

@ -0,0 +1,23 @@
namespace HttpClientStudy.Model
{
/// <summary>
/// 账号
/// </summary>
public class Account
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 密码
/// </summary>
public string? Password { get; set; }
}
}

@ -1,7 +0,0 @@
namespace HttpClientStudy.Model
{
public class Class1
{
}
}

@ -1 +1,8 @@
global using Xunit;
global using Xunit;
global using HttpClientStudy.Model;
global using HttpClientStudy.Core;
global using HttpClientStudy.Service;
global using HttpClientStudy.WebApp;
global using HttpClientStudy.WebApp.Models;
global using HttpClientStudy.WebApp.Controllers;

@ -26,6 +26,7 @@
<ProjectReference Include="..\HttpClientStudy.Core\HttpClientStudy.Core.csproj" />
<ProjectReference Include="..\HttpClientStudy.Model\HttpClientStudy.Model.csproj" />
<ProjectReference Include="..\HttpClientStudy.Service\HttpClientStudy.Service.csproj" />
<ProjectReference Include="..\HttpClientStudy.WebApp\HttpClientStudy.WebApp.csproj" />
</ItemGroup>
</Project>

@ -1,11 +0,0 @@
namespace HttpClientStudy.UnitTest
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}

@ -0,0 +1,24 @@
using Xunit.Abstractions;
namespace HttpClientStudy.UnitTest
{
/// <summary>
/// 使用 xUnit 单元测试框架
/// </summary>
public class UseXunit
{
private readonly ITestOutputHelper _logger;
public UseXunit(ITestOutputHelper outputHelper)
{
_logger = outputHelper;
}
[Fact]
public void UseXunit_Test()
{
_logger.WriteLine("使用 xUnit 单元测试框架!");
Assert.True(true,"使用 xUnit");
}
}
}

@ -0,0 +1,144 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit.Abstractions;
namespace HttpClientStudy.UnitTest.WebApp
{
public class BaseResultTest
{
private readonly ITestOutputHelper _logger;
public BaseResultTest(ITestOutputHelper outputHelper)
{
_logger = outputHelper;
}
[Fact]
public void New_BaseResult_Test()
{
var result = new BaseResult() { Code = 1, Message = "成功", Data = null };
Assert.NotNull(result);
Assert.Equal(1, result.Code);
Assert.Equal("成功", result.Message);
Assert.Null(result.Data);
}
[Fact]
public void New_BaseResult_Test2()
{
var result = new BaseResult() { Code = 0, Message = "失败", Data = new { Msg = "测试" } };
Assert.NotNull(result);
Assert.IsType<BaseResult>(result);
Assert.Equal(0, result.Code);
Assert.Equal("失败", result.Message);
}
[Fact]
public void New_BaseResult_Test3()
{
var result = new BaseResult() { Code = 0, Message = "异常", Data = new Exception("异常") };
Assert.NotNull(result);
Assert.Equal(0, result.Code);
Assert.Equal("异常", result.Message);
Assert.IsType<Exception>(result.Data);
}
[Fact]
public void New_Generic_BaseResult_Test()
{
var result = new BaseResult<string>() { Code = 1, Message = "成功", Data = string.Empty };
Assert.NotNull(result);
Assert.Equal(1, result.Code);
Assert.Equal("成功", result.Message);
Assert.Equal(string.Empty, result.Data);
}
[Fact]
public void New_Generic_BaseResult_Create_Test()
{
var result = BaseResult<string>.Create(string.Empty);
Assert.NotNull(result);
Assert.IsType<string>(result.Data);
Assert.Equal(0, result.Code);
Assert.Equal("", result.Message);
Assert.Empty(result.Data);
}
[Fact]
public void BaseResultUtil_Default_Test()
{
var result = BaseResultUtil.Default<string>();
Assert.NotNull(result);
Assert.Null(result.Data);
Assert.Equal(0, result.Code);
Assert.Equal("", result.Message);
var result2 = BaseResultUtil.Default<int>();
Assert.NotNull(result2);
Assert.IsType<int>(result2.Data);
Assert.Equal(0,result2.Data);
Assert.Equal(0, result2.Code);
Assert.Equal("", result2.Message);
var result3 = BaseResultUtil.Default(new { Name="匿名类"});
Assert.NotNull(result);
Assert.IsType(result3.Data!.GetType(),result3.Data);
Assert.Equal("匿名类",result3.Data!.Name);
Assert.Equal(0, result2.Code);
Assert.Equal("", result2.Message);
}
[Fact]
public void BaseResultUtil_Success_Test()
{
var result = BaseResultUtil.Success<string>();
Assert.NotNull(result);
Assert.Null(result.Data);
Assert.Equal(0, result.Code);
Assert.Equal("", result.Message);
var result2 = BaseResultUtil.Success<int>();
Assert.NotNull(result2);
Assert.IsType<int>(result2.Data);
Assert.Equal(0, result2.Data);
Assert.Equal(0, result2.Code);
Assert.Equal("", result2.Message);
var result3 = BaseResultUtil.Success(new { Name = "匿名类" },1,"成功");
Assert.NotNull(result);
Assert.IsType(result3.Data!.GetType(), result3.Data);
Assert.Equal("匿名类", result3.Data!.Name);
Assert.Equal(0, result2.Code);
Assert.Equal("", result2.Message);
}
[Fact]
public void BaseResultUtil_Error_Test()
{
}
[Fact]
public void BaseResultUtil_Fail_Test()
{
}
[Fact]
public void BaseResultUtil_Exception_Test()
{
}
}
}

@ -0,0 +1,120 @@
namespace HttpClientStudy.WebApp
{
/// <summary>
/// API 返回基类
/// </summary>
public class BaseResult
{
/// <summary>
/// 接口返回代码
/// </summary>
public int Code { get; set; }
/// <summary>
/// <summary>
/// 接口返回说明信息
/// </summary>
public string? Message { get; set; }
/// <summary>
/// 接口返回数据
/// </summary>
public object? Data { get; set; } = string.Empty;
}
/// <summary>
/// API 泛型返回基类
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseResult<T> : BaseResult
{
public static BaseResult<T> Create(T? data = default, int code = 0, string message = "")
{
return new BaseResult<T> { Data = data, Code = code, Message = message };
}
public new T? Data { get; set; }
}
/// <summary>
/// API返回基类 工具类
/// </summary>
public static class BaseResultUtil
{
public static BaseResult<TData> Create<TData>(TData data, int code = 0, string message = "")
{
return new BaseResult<TData>() { Data = data, Code = code, Message = message };
}
public static BaseResult<TData> Success<TData>()
{
return Success<TData>(default, 1, "成功");
//return new BaseResult<TData>() { Data = default, Code = 1, Message = "成功" };
}
public static BaseResult<TData> Success<TData>(TData data)
{
return new BaseResult<TData>() { Data = data, Code = 1, Message = "成功" };
}
public static BaseResult<TData> Success<TData>(TData data, string message)
{
return new BaseResult<TData>() { Data = data, Code = 1, Message = message };
}
public static BaseResult<TData> Success<TData>(TData data, int code, string message)
{
return new BaseResult<TData>() { Data = data, Code = code, Message = message };
}
public static BaseResult<TData> Error<TData>()
{
return new BaseResult<TData>() { Data = default, Code = 0, Message = "错误" };
}
public static BaseResult<TData> Error<TData>(TData data, string message = "错误")
{
return new BaseResult<TData>() { Data = data, Code = 0, Message = "错误" };
}
public static BaseResult<TData> Error<TData>(TData data, int code = 0, string message = "错误")
{
return new BaseResult<TData>() { Data = data, Code = 0, Message = "错误" };
}
public static BaseResult<TData> Fail<TData>() where TData : class
{
return new BaseResult<TData>() { Data = default, Code = 0, Message = "失败" };
}
public static BaseResult<TData> Fail<TData>(TData data, string message = "失败")
{
return new BaseResult<TData>() { Data = data, Code = 0, Message = "失败" };
}
public static BaseResult<TData> Fail<TData>(TData data, int code = 0, string message = "失败")
{
return new BaseResult<TData>() { Data = data, Code = 0, Message = "失败" };
}
public static BaseResult<TData> Exception<TData>(Exception ex)
{
return new BaseResult<TData>() { Data = default, Code = 0, Message = $"异常:{ex.Message}" };
}
public static BaseResult<TData> Exception<TData>(Exception ex, TData data)
{
return new BaseResult<TData>() { Data = data, Code = 0, Message = $"异常:{ex.Message}" };
}
public static BaseResult<TData> Exception<TData>(Exception ex, TData data, int code = 0)
{
return new BaseResult<TData>() { Data = data, Code = code, Message = $"异常:{ex.Message}" };
}
public static BaseResult<TData> Default<TData>(TData? data = default)
{
return new BaseResult<TData>() { Code = 0, Message = "", Data = data };
}
}
}

@ -0,0 +1,38 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace HttpClientStudy.WebApp.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class AccountController : ControllerBase
{
public AccountController() { }
/// <summary>
/// Ping 测试接口
/// </summary>
/// <example>
/// Ping
/// </example>
/// <returns></returns>
[HttpGet]
public IActionResult Ping()
{
return Ok("pong");
}
/// <summary>
/// 获取Token
/// </summary>
/// <returns></returns>
[AllowAnonymous]
[HttpGet]
public IActionResult GetToken()
{
return new JsonResult(new { Code = 1, Message = "", Token = "a.b.c" });
}
}
}

@ -1,33 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace HttpClientStudy.WebApp.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}

@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
namespace HttpClientStudy.WebApp.Models
{
/// <summary>
/// 获取Token 请求类
/// </summary>
public class UserForToken
{
/// <summary>
/// 账号
/// </summary>
[Required]
public required string Account { get; set; }
/// <summary>
/// 密码
/// </summary>
[Required]
public required string Password { get; set; }
}
}

@ -9,7 +9,7 @@
}
},
"profiles": {
"http": {
"WebApp": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,

@ -1,13 +0,0 @@
namespace HttpClientStudy.WebApp
{
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
}
Loading…
Cancel
Save