меня есть интерфейсFakeItEasy - Имея интерфейс поддельной наследовать от абстрактного в то время как доля же наследование интерфейса
public interface IInterface { void DoSomething(); }
Другой интерфейс
public interface IOtherInterface : IInterface { }
Абстрактный класс
public abstract class AbstractClass : IInterface
{
public void DoSomething()
{
Console.WriteLine("Got here");
}
}
Я m записывая единичный тест и подделку IOtherInterface. В абстрактном классе уже содержатся полезные методы, которые я бы хотел использовать для моего модульного теста. Как мне сделать мой A.Fake<IOtherInterface>();
наследовать от AbstractClass
?
Это то, что я пробовал до сих пор, но он не работает - AbstractClass.DoSomething не попадает.
IOtherInterface fake = A.Fake<IOtherInterface>(builder => builder.Implements(typeof (AbstractClass)));
fake.DoSomething();
Конечно, если бы я сделать прокси, как:
var abstractFake = A.Fake<AbstractClass>();
A.CallTo(() => fake.DoSomething()).Invokes(abstractFake.DoSomething);
fake.DoSomething();
... все работает, как я хотел. Есть ли встроенный механизм для достижения этого, так что мне не нужен этот прокси-сервер abstractFake
?
UPDATE
мне нужно IOtherInterface
, потому что у меня есть класс клиента, который нуждается в том, что IOtherInterface в зависимости:
class Consumer
{
public Consumer(IOtherInterface otherInterface)
{
otherInterface.DoSomething();
}
}
Он делает, однако переменная 'abstractFake' будет иметь тип' AbstractClass', а не 'IOtherInterface'. Мне нужно 'IOtherInterface'. См. Обновление :) –
Спасибо, что подняли этот вопрос. Как вы можете видеть из ответа Блэра Конрада, в результате были подняты две проблемы проекта, и это здорово! –
@AdamRalph Я буду честен, мне удавалось увидеть активность Блэра, зайдя и создав эти проблемы проекта, чего вы обычно не видите. Обычно даже соавторы проекта просто скажут «go file a bug». Во всяком случае, я рад, что косвенно внес свой вклад :) –