2013-05-16 3 views
3

Я следую принятому ответу в этом question, но я получаю NullReferenceException.Stub setter в Rhino Mock partial mock

Мне нужно иметь частичный макет-заглушку свойства (как геттер, так и сеттер), чтобы вести себя как заглушка (как простое автоматическое свойство). В настоящее время я могу заглушить геттер, но не сеттер.

Возможно ли это?

EDIT: это простой пример, я надеюсь, что это поможет объяснить мою проблему.

public class SomeClass 
{ 
public virtual string SomeProperty 
{ 
    get{ return SomeMethodDependingOnDBOrAspSession(); } 
    set{ SomeMethodDependingOnDBOrAspSession(value); } // I want to avoid calling this setter implementation 
} 
} 

var partialMock = MockRepository.GeneratePartialMock<SomeClass>(); 
partialMock.Stub(p => p.SomeProperty); // I want SomeProperty to behave as an automatic property 
+0

Образец примера, чтобы проиллюстрировать проблему? –

+0

@JeffBridgman Я добавил пример, спасибо. – jorgehmv

ответ

2

При использовании PartialMock вы можете получить автоматическое Реализуемый свойство, как поведение, используя PropertyBehavior особенность Rhino Mocks. Учитывая класс в вашем вопросе, для меня проходит следующий тест nunit.

[Test] 
public void TestPartialMock() 
{ 
    var someClass = MockRepository.GeneratePartialMock<SomeClass>(); 
    someClass.Stub(x => x.SomeProperty).PropertyBehavior(); 

    string val = "yo!"; 
    Assert.DoesNotThrow(() => someClass.SomeProperty = val); 
    Assert.AreEqual(val, someClass.SomeProperty); 
} 

Если не нужен PartialMock вы могли бы использовать Stub, который имеет поведение свойства по умолчанию. Вы просто замените первые две строки теста на:

var someClass = MockRepository.GenerateStub<SomeClass>(); 
+0

Да, я забыл о добавлении виртуального в примере, но я уже использую это ключевое слово в своем коде. Разница с вашим ответом заключается в том, что мне нужно использовать Partial Mock, а не Stub. Я обновил свой пример. – jorgehmv

+0

Обновлен вопрос об использовании 'PartialMock'. –

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