Unit Testing Dapper mit Inline-AbfragenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Unit Testing Dapper mit Inline-Abfragen

Post by Anonymous »

Ich weiß, dass es mehrere Fragen gibt, die meiner ähneln.
  • Dapper: Unit Testing SQL Queries
aber ich glaube nicht, dass die obige Frage eine klare Antwort hat, die meinen Anforderungen entspricht.
Im Moment entwickle ich ein neues WebAPI-Projekt und teile es zwischen WebAPI auf und DataAccess-Technologie. Ich habe kein Problem damit, den WebAPI-Controller zu testen, da ich die Datenzugriffsklasse simulieren kann.
Aber für die DataAccess-Klasse ist das eine andere Geschichte. Da ich Dapper mit Inline-Abfragen verwende, bin ich etwas verwirrt darüber, wie ich es mit einem Unit-Test testen soll. Ich habe einige meiner Freunde gefragt, und sie führen lieber einen Integrationstest anstelle eines Unit-Tests durch.
Ich möchte wissen, ob es möglich ist, die verwendete DataAccess-Klasse einem Unit-Test zu unterziehen Dapper- und Inline-Abfragen.
Nehmen wir an, ich habe eine Klasse wie diese (dies ist eine generische Repository-Klasse, da viele Codes ähnliche Abfragen haben, die sich nach Tabellenname und Feld unterscheiden)

Code: Select all

public abstract class Repository : SyncTwoWayXI, IRepository where T : IDatabaseTable
{
public virtual IResult GetItem(String accountName, long id)
{
if (id  p.CustomAttributes.All(a => a.AttributeType != typeof(SqlMapperExtensions.DapperIgnore))).Select(p => p.Name)));
builder.From(typeof(T).Name);
builder.Where("id = @id", new { id });
builder.Where("accountID = @accountID", new { accountID = accountName });
builder.Where("state != 'DELETED'");

var result = new Result();
var queryResult = sqlConn.Query(query.RawSql, query.Parameters);

if (queryResult == null || !queryResult.Any())
{
result.Message = "No Data Found";
return result;
}

result = new Result(queryResult.ElementAt(0));
return result;
}

// Code for Create, Update and Delete
}
Und die Implementierung für den obigen Code ist wie folgt:

Code: Select all

public class ProductIndex: IDatabaseTable
{
[SqlMapperExtensions.DapperKey]
public Int64 id { get; set; }

public string accountID { get; set; }
public string userID { get; set; }
public string deviceID { get; set; }
public string deviceName { get; set; }
public Int64 transactionID { get; set; }
public string state { get; set; }
public DateTime lastUpdated { get; set; }
public string code { get; set; }
public string description { get; set; }
public float rate { get; set; }
public string taxable { get; set; }
public float cost { get; set; }
public string category { get; set; }
public int? type { get; set; }
}

public class ProductsRepository : Repository
{
// ..override Create, Update, Delete method
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post