依赖mysql的单元测试_.NET Core之单元测试(二):使用内存数据库处理单元测试中的数据库依赖...

为减少篇幅,隐藏了SampleEntity和SqliteDbContext

定义一个待测试API

如下,我们定义了一个名为Sample的API,其中有一个外部依赖项SqliteDbContext

[Route("api/[controller]")]

[ApiController]

public class SampleController : ControllerBase

{

private readonly SqliteDbContext _sqliteDbContext;

public SampleController(SqliteDbContext sqliteDbContext)

{

_sqliteDbContext = sqliteDbContext;

}

[HttpGet("{id}")]

public async Task Get(int id)

{

var sampleData = await _sqliteDbContext.SampleEntity

.SingleOrDefaultAsync(s => s.Id == id);

return Ok(sampleData);

}

}

测试用例

本测试使用MSTest

Install-Package Microsoft.EntityFrameworkCore.InMemory -Version 3.1.2

private async Task GetSqliteDbContextAsync()

{

var options = new DbContextOptionsBuilder()

.UseInMemoryDatabase(Guid.NewGuid().ToString())

.Options;

var sqliteDbContext = new SqliteDbContext(options);

sqliteDbContext.SampleEntity.Add(new Infrastructure.Entities.SampleEntity

{

Id = 1,

BoolValue = false,

DateTimeValue = DateTime.Now,

StringValue = "sample"

});

await sqliteDbContext.SaveChangesAsync();

return sqliteDbContext;

}

编写测试方法

调用GetSqliteDbContextAsync()处理外部依赖项SqliteDbContext

[TestClass]

public class SampleControllerTest

{

[TestMethod]

public async Task Get_ReturnOK_WithExpectedParameters()

{

// Arrange

var dbContext = await GetSqliteDbContextAsync();

var controller = new SampleController(dbContext);

// Act

var response = await controller.Get(1);

var responseModel = ((OkObjectResult)response).Value as SampleEntity;

// Assert

Assert.IsInstanceOfType(response, typeof(OkObjectResult));

Assert.IsTrue(responseModel.Id == 1);

Assert.IsFalse(responseModel.BoolValue);

Assert.IsTrue(responseModel.StringValue == "sample");

}

}

可以看到,测试已通过

a08d22f4f9b3e73cbfa5a991f14ed322.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值