繁体   English   中英

如何在XUnit复杂方法中进行测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM