помощь в написании модульного теста для метода с использованием носорогов - PullRequest
2 голосов
/ 26 ноября 2011

Мне нужна помощь в написании модульного теста для следующего класса с использованием Rhino Mocks 3.5. Следующий переопределенный метод в моем классе:

    public override void Initialize(params object[] messages)
    {
        var data = new ViewData
        {
            Name = this.GetName()
        };

        this.Notify(data);
    }

Я хочу написать тест для проверки того, что при вызове метода Initialize метод вызывает метод Notify и имеет параметр типа ViewData. Также я хочу проверить, что метод GetName, который является частным методом, вызывается в этом методе. Я использую метод доступа для доступа к частному методу GetName.

Любая помощь будет полезна, поскольку я новичок в написании тестов и мне нужна помощь.

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

То, что вы хотите, называется частичным макетом .

[Test]
public void UsingPartialMocks()
{
  MockRepository mocks = new MockRepository();
  YourClass partialMock =  mocks.PartialMock<YourClass>();
  Expect.Call(partialMock.Notify(null)).IgnoreArguments();
  mocks.ReplayAll();
  partialMock.Initialize(null);
  mocks.VerifyAll();
}
0 голосов
/ 28 ноября 2011

Не отвечая непосредственно на ваш вопрос о том, как это сделать с помощью Rhino (кажется, что Джон уже проделал приличную работу в этом направлении), для потомства я покажу, как я бы проверил это, используя ручную насмешку.(потерпите меня, я давно не делал C #, так что извините за синтаксические ошибки)

[Test]
public void initializeRegistersViewDataWithGivenName()
{
  ShuntedYourClass yourClass = new ShuntedYourClass();
  yourClass.initialize( /* arg list */ );

  // Verify 'Notify' was called
  Assert.NotNull(yourClass.registeredViewData);

  // Verify 'GetName' private method was invoked and
  // 'Name' was properly populated
  Assert.AreEqual("expected name", yourClass.registeredViewData.Name);
}

// Nested class for testing purposes only.
class ShuntedYourClass : public YourClass
{
  public ViewData registeredViewData;

  public override void Notify(ViewData vd)
  {
    this.registeredViewData = vd;
  }
}

Этот код теперь проверяет, что метод Initialize действительно работает правильно и выполняет Notify с правильными параметрами.

Надеюсь, это поможет!

Брэндон

...