如何解决如何进行OData控制器单元测试
我已经使用代码生成器工具来生成Odata Controller(https://efg.loresoft.com/)实体框架核心数据库的第一模型生成。
我的api项目中安装的软件包
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<packagereference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.0.1" />
<packagereference Include="FluentValidation.AspNetCore" Version="9.2.0" />
<packagereference Include="IdentityServer4.AccesstokenValidation" Version="3.0.1" />
<packagereference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.8" />
<packagereference Include="Microsoft.AspNetCore.Cors" Version="2.2.0" />
<packagereference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.8" />
<packagereference Include="Microsoft.AspNetCore.OData" Version="7.5.0" />
<packagereference Include="scrutor" Version="3.2.2" />
<packagereference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
</ItemGroup>
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Nowarn>$(Nowarn);1591</Nowarn>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Park.Core\Park.Core.csproj" />
</ItemGroup>
</Project>
我们编写了Controller基础类
public class ODataControllerBase<TEntity,TReadModel,TCreateModel,TUpdateModel> : ODataController
where TEntity : class,IHaveIdentifier
where TReadModel : EntityReadModel
where TCreateModel : EntityCreateModel
where TUpdateModel : EntityUpdateModel
{
protected ODataControllerBase(ParkContext dataContext,IMapper mapper,IValidator<TCreateModel> createValidator,IValidator<TUpdateModel> updateValidator)
{
DataContext = dataContext;
Mapper = mapper;
CreateValidator = createValidator;
UpdateValidator = updateValidator;
}
protected ParkContext DataContext { get; }
protected IMapper Mapper { get; }
protected IValidator<TCreateModel> CreateValidator { get; }
protected IValidator<TUpdateModel> UpdateValidator { get; }
[HttpGet]
[ODaTaroute]
[ProducesResponseType(StatusCodes.Status200OK)]
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IActionResult Get()
{
var dbSet = DataContext
.Set<TEntity>();
return Ok(dbSet.AsQueryable());
}
[HttpGet("{key}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[EnableQuery(PageSize = 10,AllowedQueryOptions = AllowedQueryOptions.All)]
public IActionResult Get([FromODataUri]string key)
{
var dbSet = DataContext
.Set<TEntity>();
return Ok(dbSet.AsQueryable().Where(p=> p.Id == key));
}
/// <summary>
/// Support for create
/// </summary>
[HttpPost("")]
[Consumes(MediaTypeNames.Application.Json)]
[ProducesResponseType(StatusCodes.Status201Created)]
[EnableQuery(PageSize = 10,AllowedQueryOptions = AllowedQueryOptions.All)]
public async Task<IActionResult> Post(CancellationToken cancellationToken,[FromBody]TCreateModel createModel)
{
var identityName = User?.Identity?.Name;
var date = DateTime.UtcNow;
createModel.Id = Guid.NewGuid().ToString();
createModel.CreatedDate = date;
createModel.CreatedBy = identityName;
createModel.ModifiedDate = date;
createModel.ModifiedBy = identityName;
// validate model
await CreateValidator.ValidateAndThrowAsync(createModel,cancellationToken: cancellationToken);
// create new entity from model
var entity = Mapper.Map<TEntity>(createModel);
// add to data set,id should be generated
await DataContext
.Set<TEntity>()
.AddAsync(entity,cancellationToken);
// save to database
await DataContext
.SaveChangesAsync(cancellationToken);
//return Ok(entity);
return new ObjectResult(entity) { StatusCode = StatusCodes.Status201Created };
}
以上是我的基本控制器
我的控制器外观
public class UsersController : ODataControllerBase<Park.Core.Data.Entities.Users,UsersReadModel,UsersCreateModel,UsersUpdateModel>
{
public UsersController(Park.Core.Data.ParkContext dataContext,IValidator<UsersCreateModel> createValidator,IValidator<UsersUpdateModel> updateValidator) : base(dataContext,mapper,createValidator,updateValidator)
{
}
}
我需要对控制器进行单元测试吗? 我们需要如何测试?我是C#中的单元测试和代码覆盖率工具的新手。
任何指针都将不胜感激。
我需要为Nunit和Moq做推荐的单元测试框架
最好的方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。