2015-02-12 5 views
0

Я пытаюсь вычеркнуть макет с параметром базового класса и вернуть ему одно и то же значение для каждого вызова. Кажется, я не могу заставить его работать правильно, и я не могу правильно сформулировать формулировку в Google.Метод Stubbing с параметром базового класса в Rhino Mocks

Основные структуры данных

public abstract class Base { } 

public class BaseImplA : Base { } 
public class BaseImplB : Base { } 

public interface IDoStuff 
{ 
    bool DoStuff(Base b); 
} 

Реализация:

var MockDoStuff = MockRepository.GenerateMock<IDoStuff>(); 

MockDoStuff.Stub(x => x.DoStuff<Arg<Base>.Is.TypeOf); 
      .Return(true); 

Заглушка не возвращает истину, потому что это тип проверки, BaseImpl вместо Base.

Что нужно изменить, чтобы принять его, чтобы принять его Base вместо добавления заглушек для каждого из моих BaseImpl -esque типов?

ответ

1

В вашем примере кода реализации есть синтаксические ошибки. Кроме того, чтобы установить конкретный метод Mock для возврата значения, целевой метод должен быть отмечен как «Виртуальный», так и «Override».

Вот код, который должен работать по желанию:

public abstract class Base { } 

public class BaseImplA : Base { } 
public class BaseImplB : Base { } 

public class IDoStuff 
{ 
    public virtual bool DoStuff(Base b) 
    { 
     return true; 
    } 
} 

Реализация

public void TestMethod1() 
{ 
    var mockDoStuff = MockRepository.GenerateMock<IDoStuff>(); 

    mockDoStuff.Stub(x => x.DoStuff(Arg<Base>.Is.Anything)).Return(true); 

    Assert.IsTrue(mockDoStuff.DoStuff(new BaseImplA())); 
} 
+0

Oops! Спасибо, что поймал это. 'IDoStuff' должен быть интерфейсом, а не классом. Я исправил это в своем вопросе. – Cameron

+0

Наличие интерфейса и использование заглушки MockRepository.GenerateStub () также будет работать. –