Тестовый пример NUNIT для idbcontexttransactionC#

Место общения программистов C#
Anonymous
Тестовый пример NUNIT для idbcontexttransaction

Сообщение Anonymous »

Я пишу тестовый пример Nunit для приведенного ниже кода. IDbContextTransaction взят из библиотеки Microsoft.EntityFrameworkCore.Storage, аргумент транзакции DeleteDataAsync передается из метода вызывающего объекта, а в методе вызывающего объекта он записывается как using (varscope = _dbContext.Database.BeginTransaction()). Это передается в этот метод.
Во время отладки я получаю следующую ошибку:

Исключение System NotSupported.
Неподдерживаемое выражение. GetDbTransaction.

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

public async Task DeleteDataAsync(IDbContextTransaction transaction)
{
try
{
using (var command = transaction.GetDbTransaction().Connection.CreateCommand())
{

await TruncateTable(command, $"TRUNCATE TABLE MY_TABLE");

}
}
catch (Exception ex)
{
transaction.Rollback();
_logger.LogCritical($"Error occurred in DeleteDataAsync(): {ex.Message}");
}
}
Я пытаюсь написать модульный тест, охватывающий метод DeleteDataAsync.

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

 [Test]
public async Task DeleteDataAsync_Error()
{
var transactionMock = new Mock();
var dbTransactionMock = new Mock();
var dbCommandMock = new Mock();

// Here I am trying to mock the transaction:
transactionMock.Setup(t => t.GetDbTransaction())
.Returns(dbTransactionMock.Object);

dbTransactionMock.Setup(t => t.Connection.CreateCommand())
.Returns(dbCommandMock.Object);
}
Методы расширения (здесь: DbContextTransactionExtensions.GetDbTransaction) нельзя использовать в выражениях настройки/проверки. Могу ли я узнать, что здесь не так во время насмешки?
Я не могу понять, как это сделать, и уверен, что приведенный ниже модульный тест, который я написал, нуждается в модификации. Может ли кто-нибудь помочь мне здесь?

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