Возникли проблемы с moq - PullRequest
       20

Возникли проблемы с moq

2 голосов
/ 18 января 2009

Я пробую moq, и у меня возникла проблема со следующим тестовым телом:

var child = new Mock<ZooNode>();
var parent = new Mock<ZooNode>();
child.Object.Parent = parent.Object;
parent.Expect(p => p.Children.Contains(child.Object)).Returns(true);

который бросает:

System.ArgumentException: неверный ожидание на неопределяемый член: p => p.Children.Contains (значение (ZooCms.Core.Tests.Model.ZooNodeTest + <> c__DisplayClass0) .child.Object).

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

Заранее спасибо.

EDIT

Вот код после предложенного изменения из ответ Дарина :

public abstract class ZooNode : ZooObject
{
    private ZooNode _parent{ get; set;}
    public ZooNode Parent { 
        get
        {
            return _parent;
        }
        set
        {
            if(Parent != null) 
                Parent.Children.Remove(value);
            _parent = value;
            _parent.Children.Add(this);
        }
    }
    public virtual IList<ZooNode> Children { get; private set; }

}

теперь бросает

Метод испытания ZooCms.Core.Tests.Model.ZooNodeTest.TestSetParentAddsNodeToParentNodeList бросил исключение: System.NullReferenceException: объект ссылка не установлена ​​на экземпляр объект ..

Ответы [ 2 ]

5 голосов
/ 18 января 2009

Ваше дочернее свойство коллекции должно быть виртуальным, если вы хотите определить ожидания для него:

public abstract class ZooNode
{
    public ZooNode Parent { get; set; }
    public virtual IList<ZooNode> Children { get; set; }
}
1 голос
/ 19 января 2009

Chance, Вы на самом деле никогда не инициализируете коллекцию Children. Итак, либо вам нужно инициализировать его в конструкторе, либо вы можете указать Moq Mock по умолчанию.

var parent = new Mock<ZooNode>() { DefaultValue = DefaultValue.Mock };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...