[英]How to test in xunit complex method
我如何在asp.net core 2.0中按照与测试项目不同的项目中存在的方法进行测试? 例如这样的:
public partial class LoanRequestServiceController : BaseServiceController
{
public ServiceDTO<AP_CBO> AddCBO(AP_CBO cbo)
{
ServiceDTO<AP_CBO> dto = new ServiceDTO<AP_CBO>();
try
{
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Snapshot }))
{
cbo.ID_CBO = 333;
dto.Data = cbo;
scope.Complete();
}
}
catch (Exception ex)
{
dto.Error = new ServiceError(ex);
Globals.Logger.Error(ex);
}
finally
{
//Globals.CastleComponentsContainer.Release(LoanRequestDAL);
}
return dto;
}
}
我测试了一些“轻便”的方法,例如服务方法是否返回SucessCode并且它可以工作。 这是我的测试课:
[Theory]
[InlineData("/Sample/AddCBO")]
public async Task Test_AddCBO(string url)
{
//Arrange
var client = _factory.CreateClient();
//Act
var response = await client.GetAsync(url);
//Assert
response.EnsureSuccessStatusCode();
//Compare two dto objects AP_CBO
//object expected = new AP_CBO { properties... }
// object responseObject = response.Content...
//Assert.Equal(expected, responseObject);
}
我不知道如何使用多属性测试对象。 也许我需要使用Moq? 从理论上讲,此方法将转到DAL(数据库访问层),然后从数据库打包的对象返回并返回到api,或者在我的情况下返回测试。
首先,您必须确定要编写的测试级别。
如果您正在编写单元测试 ,则应该模拟所有外部集成(在您的情况下,我可以识别HTTP请求->控制器和控制器->数据库 )。 这是功能测试的基础。 因此,如果要编写单元测试,可以,应该使用诸如NSubstitute或Moq之类的模拟框架(并且只能通过调用方法来测试方法的行为)。
您发布的测试样本在我看来像一个集成测试,因为您包括集成HTTP request-> Controller 。 在这种情况下,我将为数据库填充数据(如果相关),然后实际调用您的API端点(就像您已经在做的那样)。
要检查ASP.Net Core中响应的内容(DTO),您必须执行以下操作:
// ...
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var content = await httpResponseMessage.Content.ReadAsStringAsync();
var serviceDto = JsonConvert.DeserializeObject<ServiceDTO<AP_CBO>>(content); // Only for Json
// Validate serviceDto
这是一个很长的话题,需要在这里详细说明; 我认为如果您按照示例阅读详细信息会更好。
我假设您要编写单元测试; 对于单元测试,我可以推荐可以帮助您的本教程。 请检查一下
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.