2011-01-21 2 views
0

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

Мой вопрос: могу ли я использовать Rhino-mocks для фактического закрытия объекта (в этом случае только для чтения свойство) и проверить логику свойства get_Count() объекта ложного 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(); 
     } 
    } 
+2

Если вы только начинаете с насмешки, не изучайте метод записи/воспроизведения, - прочитайте синтаксис AAA (аранжировать-действовать-утверждать), который поддерживает Rhino. –

ответ

2

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

В случае, показанном выше, вы не использовали бы насмешку вообще.

Также см. Мой комментарий к синтаксису AAA.

+0

Я думаю, вы имеете в виду, что хотите издеваться над зависимостями, а не от зависимостей, т. Е. Хотите издеваться над объектом, на который зависит объект, который тестируется. –

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