Выход за пределы структуры сущностей BeginTransactionC#

Место общения программистов C#
Ответить
Anonymous
 Выход за пределы структуры сущностей BeginTransaction

Сообщение Anonymous »

Я пытаюсь понять смысл мокинга в модульном тестировании и интегрировать процесс модульного тестирования в свой проект. Итак, я просмотрел несколько руководств и рефакторил свой код для поддержки макетирования, но в любом случае я не могу пройти тесты, потому что метод БД, который я пытаюсь протестировать, использует транзакцию, но при создании транзакции я получаю


Базовый поставщик не смог открыть.


Без транзакции все работает нормально.

В настоящее время у меня есть код:

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

[TestMethod]
public void Test1()
{
var mockSet = GetDbMock();
var mockContext = new Mock();
mockContext.Setup(m => m.Repository).Returns(mockSet.Object);

var service = new MyService(mockContext.Object);
service.SaveRepository(GetRepositoryData().First());
mockSet.Verify(m => m.Remove(It.IsAny()), Times.Once());
mockSet.Verify(m => m.Add(It.IsAny()), Times.Once());
mockContext.Verify(m => m.SaveChanges(), Times.Once());
}

// gets the DbSet mock with one existing item
private Mock GetDbMock()
{
var data = GetRepositoryData();
var mockSet = new Mock();

mockSet.As().Setup(m => m.Provider).Returns(data.Provider);
// skipped for brevity
return mockSet;
}
Тестируемый код:

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

private readonly DataContext _context;
public MyService(DataContext ctx)
{
_context = ctx;
}

public void SaveRepositories(Repository repo)
{
using (_context)
{
// Here the transaction creation fails
using (var transaction = _context.Database.BeginTransaction())
{
DeleteExistingEntries(repo.Id);
AddRepositories(repo);
_context.SaveChanges();
transaction.Commit();
}
}
}
Я тоже пытался высмеять часть транзакции:

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

var mockTransaction = new Mock();
mockContext.Setup(x => x.Database.BeginTransaction()).Returns(mockTransaction.Object);
но это не работает, происходит сбой:


Неверная настройка на невиртуальный (переопределяемый в VB) член: conn =>
conn.Database.BeginTransaction()


Есть идеи, как решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/325 ... ransaction
Ответить

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

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

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

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

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