微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用自定义存储库调用SQL存储过程的应用程序服务上的自动测试失败

如何解决使用自定义存储库调用SQL存储过程的应用程序服务上的自动测试失败

我为我的asp.net零项目每个https://aspnetboilerplate.com/Pages/Documents/Articles/Using-Stored-Procedures,-User-Defined-Functions-and-Views/index.html创建了一个自定义存储库。当我使用Swagger API测试应用程序以及从我的有角度的客户端进行测试时,一切工作都很好。然后,我尝试使用我得到的asp.net零测试框架为API编写自动化测试 System.AggregateException:发生一个或多个错误。 (CommandType'StoredProcedure'无效。) ---- System.ArgumentException:CommandType'StoredProcedure'无效。”

似乎测试框架正在使用sqlLite作为数据库上下文。我不确定如何解决此问题。

测试失败

    [Fact]
    public void Should_Get_All_StaticItems()
    {
        LoginAsTenant("Default","admin");
        //Act
        **var types = _ptStaticDataTypeAppService.Get(new PTGetPTStaticDataTypeinput());**

        //Assert
        types.Result.Count.ShouldBe(_totalItems);
    }

APP服务方法

[AbpAuthorize(AppPermissions.Pages_Administration_PT_StaticDataType)]
public class PTStaticDataTypeAppService : PieceTrackerAppServiceBase,IPTStaticDataTypeAppService
{
    IPTStaticDataTypeRepository _ptStaticDataRepository;
    public PTStaticDataTypeAppService(IPTStaticDataTypeRepository ptStaticDataTypeRepository) 
    {
        _ptStaticDataRepository = ptStaticDataTypeRepository;
    }

    public async Task<List<PTGetPTStaticDataTypeForViewDto>> Get(PTGetPTStaticDataTypeInput input)
    {
        return await _ptStaticDataRepository.Get(input);
    }

存放

public class PTStaticDataTypeRepository : PieceTrackerRepositoryBase<PTStaticDataType,long>,IPTStaticDataTypeRepository
{
    private readonly IActiveTransactionProvider _transactionProvider;
    public PTStaticDataTypeRepository(IDbContextProvider<PieceTrackerDbContext> dbContextProvider,IActiveTransactionProvider transactionProvider)
        : base(dbContextProvider)
    {
        _transactionProvider = transactionProvider;
    }


    public async Task<List<PTGetPTStaticDataTypeForViewDto>> Get(PTGetPTStaticDataTypeInput input)
    {
        var data = new List<PTGetPTStaticDataTypeForViewDto>();
        var cn = Context.Database.GetDbConnection();
        if (cn.State != ConnectionState.Open)
            await cn.OpenAsync();
        using (var cmd = cn.CreateCommand())
        {
            cmd.CommandText = "usp_GetPTStaticDataType";
            **cmd.CommandType = CommandType.StoredProcedure;**

解决方法

测试框架使用内存中的SQL Lite DB通过SQL命令传递。因此,我在自定义存储库中创建了一种解决方法。

private DbConnection GetSqlConnection()
{
    const string TESTINGDB = "memory";
    const string PTCONNSTRING = "Server=(local); Database=PieceTrackerDb; Trusted_Connection=True;";
    var cn = Context.Database.GetDbConnection();
    if (cn.ConnectionString.Contains(TESTINGDB))
    {
        cn = new SqlConnection(PTCONNSTRING);
    }
    var logMsg = "PTStaticDataTypeRepository.Get Connection String = " + cn.ConnectionString;
    Console.WriteLine(logMsg);
    return cn;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?