2015-02-26 2 views
0

У меня есть небольшая проблема с пониманием того, что и что нельзя сделать с помощью FakeItEasy. Предположим, у меня есть классКак я могу подделать класс, используемый insite SUT, используя FakeItEasy

public class ToBeTested{ 

    public bool MethodToBeTested(){ 
     SomeDependentClass dependentClass = new SomeDependentClass(); 
     var result = dependentClass.DoSomething(); 
     if(result) return "Something was true"; 
     return "Something was false"; 
    } 
} 

И я что-то вроде ниже фальсифицировать зависимого класса

var fakedDepClass = A.Fake<DependentClass>(); 
A.CallTo(fakedDepClass).WithReturnType<bool>().Returns(true); 

Как я могу использовать этот fakedDepClass когда я тестирование MethodToBeTested. Если DependentClass был передан как аргумент, то я могу передать свой fakedDepClass, но в моем случае это не так (также это устаревший код, который я не контролирую).

Любые идеи?

Благодаря K

ответ

1

Вызов new SomeDependentClass() внутри MethodToBeTested означает, что вы получите конкретный фактический SomeDependentClass экземпляр. Это не подделка и не может быть подделкой FakeItEasy.

Вы должны уметь вводить поддельный класс в тестируемый код (как вы говорите) с помощью аргумента MethodToBeTested или, возможно, через один из конструкторов или свойств ToBeTested.

Если вы не можете этого сделать, FakeItEasy не сможет вам помочь.

Если вы не можете изменить ToBeTested (и я бы спросил, почему вы пишете тесты для этого, но это в стороне), вам может потребоваться перейти с другой средой изоляции. Я использовал TypeMock Isolator для описания ситуации, которую вы описали, и это проделало хорошую работу.

+0

Как я уже говорил, я пытаюсь написать несколько тестов по устаревшему коду, у меня нет роскоши менять SUT. Я взглянул на TypeMock, и это дает мне возможность Fake всех экземпляров определенного класса (я тестировал его, и он работает отлично). Спасибо за ваш ответ. –

+0

@ KarthikBalasubramanian, почему вы не можете изменить устаревший код? –

+0

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

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