Не издеваться над интерфейсом классов - PullRequest
2 голосов
/ 19 июля 2010

Правда ли, что макеты фреймворков в целом и Rhino дразнят только в определенных фальсификациях интерфейсов и классов, имеющих виртуальный метод?Например, могу ли я издеваться над следующим простым классом:

public class MyClass
{
    void method1()
    {
        //some code goes here
    }
}

Если ответ верный, почему существует такое ограничение?Есть ли обходной путь?

Ответы [ 3 ]

5 голосов
/ 19 июля 2010

Ограничение существует, потому что макеты не могут изменить method1, не будучи виртуальным или интерфейсом.Это разумное ограничение, так как интерфейсы позволяют разделить ваши зависимости и являются общей чертой хорошего кода, IMO.К сожалению, большинство .Net Framework не имеет виртуальных методов или интерфейсов ... что требует уродливой упаковки для создания интерфейсов.

Если вам это действительно не нравится, есть одна опция Mocking Framework,преодолевает ограничение, зацепляя CLR какой-то сумасшедшей магией foo.Эта фейерверк называется TypeMock Isolator .

1 голос
/ 19 июля 2010

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

0 голосов
/ 20 июля 2010

Typemock - ваш лучший выбор.

http://site.typemock.com/

...