2012-03-06 2 views
1

Возможно ли это в RhinoMocks, чтобы создать mock-объект без вызова конструктора?Создать mock без вызова конструктора

public class A 
    { 
     public A() 
     { 
      throw new InvalidOperationException("Mock me!"); 
     } 
    } 

    [Test] 
    public void TestCtors() 
    { 
     MockRepository mocks = new MockRepository(); 
     A a = (A)mocks.StrictMock(typeof(A)); 
     Assert.IsTrue(true, "Should be eligible"); 
    } 
+0

Зачем вам это нужно? Целью конструктора является инициализация членов класса в пригодном для использования состоянии. Зачем вам это пропустить? – PatrickSteele

+0

Но я хочу класс _mock_, поэтому мне не нужно его инициализировать. Например, EasyMock не вызывает ctor. –

+1

Rhino.Mocks не может этого сделать, как объяснил @Steve Haigh. Возможно, вы захотите проверить JustMock от Telerik. Я думаю, что он позволяет пропускать дефолтные/базовые ctors при создании макета. – PatrickSteele

ответ

1

Я не думаю, что есть способ обойти это, если вы издеваетесь над конкретным классом. Если бы вы могли издеваться над интерфейсом, который, очевидно, не вызывал бы конструктор. Можно ли переделать свой код так, чтобы A реализовал интерфейс и интерфейс, который вы можете высмеять?

+0

Нет, я не могу/не изменить исходный код. Интересно, почему работает конструктор? Например. в EasyMock это не так! –

+0

Я не знаком с EasyMock, но если это работает, возможно, вы можете использовать это вместо этого? C'tor стреляет здесь, потому что Rhino Mocks создает экземпляр, полученный из вашего класса - см. Примечание в конце http://ayende.com/Wiki/Rhino+Mocks+Mocking+classes.ashx –

+0

EasyMock предназначен для Java. Спасибо, тем не менее. –

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