2016-12-07 2 views
1

В приведенных ниже утверждений, я хотел установить IsNew флаг Navigation объекта в false, а затем также, возвращение false к способу IsCurrentStepUnlocked ссылаться на этот объектMoq: Как вызвать метод для объекта с Mock.Of <>

Однако, в строке 4, когда я получить значение IsNew, это «истина»

Я, кажется, не так, установите значение на объекте, а также установки что-то, чтобы вернуть заданную величину ,

1. var mockStatementInformation = Mock.Of<IStatementInformation>(); 
2. mockStatementInformation.Navigation = new Navigation { IsNew = false }; 
3. Mock.Get(mockStatementInformation).Setup(x => x.Navigation.IsCurrentStepUnlocked()).Returns(false); 

4. var isNew = mockStatementInformation.Navigation.IsNew; 

Навигация, определяется просто так, как показано ниже.

public class Navigation 
{   
    public Navigation() 
    { 
     IsNew = true; 
    } 

    public bool IsNew { get; set; } 
} 

Как установить вложенное свойство или вызвать методы на нем с помощью Moq?

+0

Спасибо, я сделал некоторые изменения в соответствии с рекомендациями. – billboard

ответ

1

Ссылка: Moq Quickstart - linq-to-mocks

И если предположить этот пример

public interface IStatementInformation { 

    Navigation Navigation { get; set; } 
} 

public class Navigation { 

    public Navigation() { 
     IsNew = true; 
    } 

    public virtual bool IsNew { get; set; } 

    public virtual bool IsCurrentStepUnlocked() { 
     return true; 
    } 
} 

Где как метод и возврат свойство истинно по умолчанию.

При тестировании, как этого результаты, как ожидается,

var mockStatementInformation = Mock.Of<IStatementInformation>(m => 
    m.Navigation == new Navigation { IsNew = false } && 
    m.Navigation.IsCurrentStepUnlocked() == false 
); 

Assert.IsFalse(mockStatementInformation.Navigation.IsCurrentStepUnlocked()); 
Assert.IsFalse(mockStatementInformation.Navigation.IsNew); 
+0

это все еще возвращает true для IsNew, я добавил заявление ниже вашего кода, как этот var isNew = mockStatementInformation.Navigation.IsNew; проверять. – billboard

+0

замените строки 1 - 3 тем, что находится в приведенном выше ответе. Я тестировал его, и он возвращает 'false' – Nkosi

+0

Итак, похоже, что свойство IsNew должно быть виртуальным, один раз я добавил виртуальный результат, как и ожидалось. спасибо – billboard

Смежные вопросы