Запись обновления JustMock Entity Framework - PullRequest
0 голосов
/ 04 мая 2018

Я прочитал примеры на JustMock (у нас есть платная версия FYI), но у меня возникают трудности с обновлением записи (без добавления).

У меня есть ILogRepo

public interface ILogRepo
{
    DbSet<LogEntry> LogEntries { get; }
    LogContext LogContext { get; }
}

У меня есть LogInteraction

public class LogInteraction : ILogInteraction
{
    private readonly ILogRepo _logRepo;

    public LogInteraction(ILogRepo logRepo)
    {
        _logRepo = logRepo;
    }

    public void UpdateLog(IList<AckDetail> ackDetails)
    {
        foreach (var ackDetail in ackDetails)
        {
            var logRecord = _logRepo.LogEntries.Single(r => r.CheckNum == ackDetail.CheckNo);
            logRecord.ProcessingStatus = ackDetail.Result.ToString();
            if (!string.IsNullOrWhiteSpace(ackDetail.Message))
            {
                logRecord.Message = ackDetail.Message;
            }
        }
        _logRepo.LogContext.SaveChanges();
    }
}

Я издевался над поддельным LogEntries (это IList). И последнее, но не менее важное - тест

[TestFixture]
    public class LogTests
    {
        private ILogRepo _mockLogRepo;
        private ILogInteraction _uut;
        private IList<AckDetail> _fakeAckDetails;

        [SetUp]
        public void SetUp()
        {
            //Arrange
            _mockLogRepo = Mock.Create<ILogRepo>();

            _fakeAckDetails = FakeAckDetails();

            _uut = new LogInteraction(_mockLogRepo);
        }

        [Test]
        public void LogUpdated()
        {
            //Arrange
            var expectedResults = FakeLogEntries_AfterAckProcessing();
            var expectedJson = JsonConvert.SerializeObject(expectedResults);

            _mockLogRepo.Arrange(m => m.LogEntries).IgnoreInstance().ReturnsCollection(FakeLogEntries_AfterSending());

            //Act
            _uut.UpdateLog(_fakeAckDetails);
            var actualResults = _mockLogRepo.LogEntries.ToList();
            var actualJson = JsonConvert.SerializeObject(actualResults);

            //Assert
            Assert.AreEqual(expectedResults.Count, actualResults.Count);
            Assert.AreEqual(expectedJson, actualJson);
        }
    }

В моем тесте мой _mockLogRepo не обновляется моим LogInteraction. Пошаговый код кажется все хорошо и хорошо. Если я проверяю контекст и смотрю на изменения, это возвращает ложь. Я думаю, что я соответствовал примеру на сайте Telerik довольно хорошо, но мне удалось найти информацию только по добавлению (и путем экстраполяции, удаления). Но так как эти два фактических метода и Обновление не в Entity Framework, я немного растерялся. Мой код будет работать в производственном процессе, но я бы хотел, чтобы он работал и в Test (весь смысл).

...