2016-05-06 3 views
2

У меня есть тип, который опирается на внешний компонент, который выполняет запросы с помощью общего метода. Вот упрощенная версия того, что находится в игре:FakeItEasy: подделка вызова общего метода без указания типа

public class UnitUnderTest 
{ 
    private IQueryEngine _engine; 

    public UnitUnderTest(IQueryEngine engine) 
    { 
     _engine = engine; 
    } 

    public OutputType DoSomething() 
    { 
     _engine.Query<ExternalType>(...); 
     _engine.Query<InternalType>(...); 
    } 
} 

public interface IQueryEngine 
{ 
    IEnumerable<T> Query<T>(string conditions); 
} 

DoSomething метод, который я пытаюсь тест называет IQueryEngine дважды.

В первый раз, когда он называет его типом, я могу получить доступ к моему тесту, поэтому у меня нет проблем с использованием A.CallTo, чтобы издеваться над ним.

Но затем он вызывает второй раз с аргументом типа, к которому я не могу получить доступ (это тип internal).

Прямо сейчас мой тест бомбит, потому что DoSomething не ожидает возврата null от вызова _engine.Query, но я не могу построить правильный тип возвращаемого объекта.

Как я могу издеваться над этим звонком?

+0

Почему вы не добавляете атрибут 'InternalsVisibleTo'? –

+0

В идеале я бы скорее не сделал этого таким образом, но так как я имел контроль над библиотекой, где определен параметр InternalType, это решение, с которым я работал. Если вы включите это в ответ, я буду рад отметить его как правильный. – Dan

ответ

1

Это звучит как идеальное использование атрибута InternalsVisibleTo. Просто добавьте экземпляр в вашу сборку с внутренним типом, когда ваша тестовая сборка станет значением.

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

  • Нет связанных вопросов^_^