Стъб сетер в частичен макет на Rhino Mock

Следвам приетия отговор в този въпрос, но получавам NullReferenceException.

Това, от което се нуждая, е да имам частично фиктивно свойство (както getter, така и setter), което да се държи като stub (като просто автоматично свойство). Понастоящем мога да заглуша гетъра, но не и сетера.

Възможно ли е това?

РЕДАКТИРАНЕ: това е прост пример, надявам се, че помага да обясня проблема си.

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

person jorgehmv    schedule 16.05.2013    source източник
comment
Примерен код за илюстриране на проблема?   -  person Jeff B    schedule 30.05.2013
comment
@JeffBridgman добавих пример, благодаря.   -  person jorgehmv    schedule 31.05.2013


Отговори (1)


Когато използвате 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>();
person Jeff B    schedule 31.05.2013
comment
Да, забравих да добавя виртуален в примера, но вече използвам тази ключова дума в моя код. Разликата с вашия отговор е, че трябва да използвам частичен макет, а не мъниче. Актуализирах моя пример - person jorgehmv; 31.05.2013
comment
Актуализира въпроса, за да използва PartialMock вместо това. - person Jeff B; 31.05.2013