首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用调用SQL存储过程的自定义存储库的App Service上的自动化测试失败

使用调用SQL存储过程的自定义存储库的App Service上的自动化测试失败
EN

Stack Overflow用户
提问于 2020-09-24 05:12:15
回答 1查看 23关注 0票数 0

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

看起来测试框架在DB上下文中使用了SQLLite。我不确定如何解决这个问题。

正在失败的测试

代码语言:javascript
复制
    [Fact]
    public void Should_Get_All_StaticItems()
    {
        LoginAsTenant("Default", "admin");
        //Act
        **var types = _ptStaticDataTypeAppService.Get(new PTGetPTStaticDataTypeInput());**

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

APP服务方式

代码语言:javascript
复制
[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);
    }

存储库

代码语言:javascript
复制
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;**
EN

回答 1

Stack Overflow用户

发布于 2020-09-24 22:05:02

测试框架使用内存中的SQL Lite DB传递SQL命令。所以我在我的自定义存储库中创建了一个变通方法。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64036295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档