Основы Moq / StructureMap - PullRequest
       14

Основы Moq / StructureMap

2 голосов
/ 10 февраля 2011

Я борюсь с какой-то очень простой / концептуальной проблемой с Moq и StructureMap.Учитывая следующий код, тест не пройден.Зачем?Кажется, что моя поддельная / введенная функциональность свойства Numbers просто игнорируется и продолжает вызывать исходную функциональность.

[TestFixture]
public class MockBasics
{
    [SetUp]
    public void SetUp()
    {
        var m = new Mock<Foo>();
        m.SetupGet(x => x.Numbers).Returns(() => new List<int> {1, 2, 3, 4, 5, 6});
        ObjectFactory.Inject(m.Object);
    }

    [Test]
    public void DoTest()
    {
        var f = new Foo();

        Assert.IsTrue(f.Numbers.Contains(6));
    }

    public class Foo
    {
        private IList<int> _numbers;
        public virtual IList<int> Numbers
        {
            get { return _numbers; }
            set { _numbers = value; }
        }

        public Foo()
        {
            //_numbers = new List<int> { 1, 2, 3, 4, 5, 6 }; // This passes the test
            _numbers = new List<int> { 1, 2, 3, 4 };
        }
    }

    public class Bar
    {
        public IList<int> GetNumbers()
        {
            var x = ObjectFactory.GetInstance<Foo>();
            return x.Numbers;
        }
    }
}

1 Ответ

4 голосов
/ 10 февраля 2011

Ваш код не связывает точки.Вы вводите макет Foo в ObjectFactory, а затем создаете экземпляр Foo без использования ObjectFactory.

Я думаю, что ваше намерение было:

var b = new Bar();
Assert.IsTrue(b.GetNumbers.Contains(6));
...