Как имитировать метод Query в Dapper C# для модульных тестов?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как имитировать метод Query в Dapper C# для модульных тестов?

Сообщение Anonymous »

Мой метод на C# выглядит так:

Код: Выделить всё

public bool Execute(IDynamicDatabaseConnection dbConn, List loadObjects, out List result)
{
result = new List();

// Perform the load for each form grid
foreach (DynamicGrid grid in loadObjects)
{
// Execute the stored procedure to load the grid data
IEnumerable storedProcResponse = ExecuteGridDataLoadStoredProcedure(dbConn, storedProcedureName);

result.Add(new DynamicGridValue(grid, response));
}
}

return true;
}

Код: Выделить всё

private IEnumerable ExecuteGridDataLoadStoredProcedure(IDynamicDatabaseConnection dbConn, string storedProcedureName)
{
const string parameterReturnMessage = "@Return_Message";
const string parameterDfPKey = "@DFPkey";
const string parameterParentDfPKey = "@ParentDFPkey";
const string parameterResult = "@Result";

var dynamicParameters = new DynamicParameters();

dynamicParameters.Add(parameterReturnMessage, string.Empty, DbType.String, ParameterDirection.Output, int.MaxValue);
dynamicParameters.Add(parameterDfPKey, long.TryParse(DFPkey.ToString(), out long dfPkeyInt) ? dfPkeyInt : 0, DbType.Int64, ParameterDirection.Input, int.MaxValue);
dynamicParameters.Add(parameterParentDfPKey, Convert.ToInt64(ParentDFPkey), DbType.Int64, ParameterDirection.Input, int.MaxValue);
dynamicParameters.Add(parameterResult, 0, DbType.Int64, ParameterDirection.ReturnValue, int.MaxValue);

// Retrieve data using Dapper
var spResponse = dbConn.Query("StoredProcedureName", dynamicParameters, commandType: CommandType.StoredProcedure);

// Retrieve the output parameter
var returnMessage = dynamicParameters.Get("@Return_Message");
var errorCode = dynamicParameters.Get(parameterResult);

// Check if there's an error message
if (!string.IsNullOrEmpty(returnMessage))
{
throw new DynamicFormException($"Stored Procedure Error: {returnMessage} (Code: {errorCode})");
}

return spResponse;
}
В моем модульном тесте

Код: Выделить всё

[TestMethod]
public void Should_ExecuteStoredProcedureAndReturnCorrectXmlResponse()
{
// Arrange
var grid = new DynamicGrid
{
DataBindingTypeID = (int)GridDataBindingType.StoredProcedure,
GridCode = "TestGrid",
DataBindingGetDFStoredProcedureDefinitionID = 1
};
var gridDataSource = new DataSource();
var queryParameterValues = new Dictionary();
var strategy = new DynamicLoadStrategyGridData(grid, gridDataSource, DFPKey, USER_ID, USER_ACCESS_RIGHTS_IDS, queryParameterValues, PARENT_DFPKEY);
var loadObjects = new List { grid };

var dbConnMock = A.Fake();

dynamic spResponse = new ExpandoObject();
spResponse.key = "Id";
spResponse.AdditionalData = "12";
List spResponseMock = new List() { spResponse };

A.CallTo(() => dbConnMock.Query(A._, A._, A._, A._, A._, A._)).Returns(spResponseMock);

// Act
var result = strategy.Execute(dbConnMock, loadObjects, out _);

// Assert
Assert.IsTrue(result);
}
Почему мой объект spResponse имеет count = 0, т. е. в нем ничего нет даже после установки макета?
Как мне установить макет для

Код: Выделить всё

var spResponse = dbConn.Query( storedProcedureName,
dynamicParameters,
commandType: CommandType.StoredProcedure );
в этой строке тип возвращаемого значения для dbConn.Query — IEnumerable.
ОБНОВЛЕНИЕ:
p>
Я тоже пробовал:

Код: Выделить всё

List spResponseMock = new List()
{
new Dictionary() { { "Id", 1 } }
};

// Assign mock response to spResponse
IEnumerable spResponse = spResponseMock;

A.CallTo(() => dbConnMock.Query(A._, A._, A._, A._, A._, A._)).Returns(spResponse);
Но и это не удалось.

Подробнее здесь: https://stackoverflow.com/questions/789 ... unit-tests
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»