Как использовать Rhino-mocks при модульном тестировании геттеров / сеттеров? - PullRequest
0 голосов
/ 21 января 2011

В настоящее время я изучаю Rhino-mocks и думаю, что путаю грань между юнит-тестированием и mocking. В моем примере ниже у меня есть свойство Count () только для чтения, для которого я пытаюсь протестировать функцию Get () (очень надуманный пример только для обсуждения). Как отмечается в комментарии к Assert.AreEqual, результат свойства Count () равен 2, тогда как должно быть 3.

У меня вопрос: могу ли я использовать Rhino-mocks, чтобы фактически заглушить объект (в данном случае это свойство только для чтения) и проверить логику свойства get_Count () объекта mock IProduct?

    public interface IProduct
    {
        int Count { get; }
    }

    public class Product : IProduct
    {
        private int count;
        public int Count
        {
            get { return count + 1; }
        }
    }

    public class TestFixture
    {
        [NUnit.Framework.Test]
        public void TestProduct()
        {
            MockRepository mock = new MockRepository();
            IProduct product = mock.Stub<IProduct>();

            product.Stub(p => p.Count).Return(2);
            mock.ReplayAll();

            Assert.AreEqual(3, product.Count); //Fails - result from product.Count is 2
            mock.VerifyAll();
        }
    }

1 Ответ

2 голосов
/ 21 января 2011

Вы издеваетесь над объектом, который пытаетесь проверить.Это в корне неверно - вы хотите смоделировать (или заглушить) ЗАВИСИМОСТЬ от объектов, которые вы пытаетесь проверить.

В показанном выше случае вы вообще не будете использовать насмешку.Также см. Мой комментарий к синтаксису AAA.

...