Исключение в конструкторе: Rhino.Mocks.Exceptions.ExpectationViolationException: ожидаемое # 0, фактическое # 1

Я знаю, что немного опаздываю на вечеринку, но я просто решил это для проекта, над которым я работаю, и решил поделиться своим решением.

Во-первых, чтобы сделать решение более re-usable, я создал базовый класс со свойствами timestamp:

public class EntityBase
{
    public DateTime? CreatedDate { get; set; }
    public DateTime? LastModifiedDate { get; set; }
}

Затем я переопределил метод SaveChanges в моем DbContext:

public class MyContext : DbContext
{
    public override int SaveChanges()
    {
        ObjectContext context = ((IObjectContextAdapter)this).ObjectContext;

        //Find all Entities that are Added/Modified that inherit from my EntityBase
        IEnumerable<ObjectStateEntry> objectStateEntries =
            from e in context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
            where
                e.IsRelationship == false &&
                e.Entity != null &&
                typeof(EntityBase).IsAssignableFrom(e.Entity.GetType())
            select e;

        var currentTime = DateTime.Now;

        foreach (var entry in objectStateEntries)
        {
            var entityBase = entry.Entity as EntityBase;

            if (entry.State == EntityState.Added)
            {
                entityBase.CreatedDate = currentTime;
            }

            entityBase.LastModifiedDate = currentTime;
        }

        return base.SaveChanges();
    }
}
0
задан Nkosi 18 March 2019 в 20:14
поделиться

1 ответ

Исключение вызвано тем, что вы вызвали члена в строгом издевательстве

IMyClassLogger logger = MockRepository.GenerateStrictMock<IMyClassLogger>(); //<-- Strict Mock here

, для которого не определены ожидания.

Вы вызываете

_database = new Database(_logger.BaseLogger);

в конструкторе, но не ожидаете, что он будет вызван, поэтому вы получите ExpectationViolationException для IMyClassLogger.get_BaseLogger(), как указано в сообщении об исключении

[ 119] Вам нужно установить ожидание для этого члена

[TestMethod]
public void Ctor_ValidParams_CreatesObject()
{
    // Arrange
    ILogger baseLogger =  MockRepository.GenerateMock<ILogger>();
    IMyClassLogger logger = MockRepository.GenerateStrictMock<IMyClassLogger>();
    logger.Stub(_ => _.BaseLogger).Return(baseLogger);

    // Act
    var result = new MyClassDataAccess(logger);

    // Assert
    Assert.IsNotNull(result);
}
0
ответ дан Nkosi 18 March 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: