2017-01-10 2 views
2

Возможно ли создать тестируемый класс с помощью FakeItEasy, где все зависимости, объявленные в конструкторе, автоматически инициализируются подделками?Создание зависимостей класса и авто-инициализации с помощью FakeItEasy

Представьте себе класс:

public class Inserting 
{ 
    public Inserting(
     ITransactionService transactionService, 
     ISharedData sharedData) 
    { 
     TransactionService = transactionService; 
     SharedData = sharedData; 
    } 

    public ITransactionService TransactionService { get; } 

    public ISharedData SharedData { get; } 

    public void Enter() 
    { 
     TransactionService.StartTransaction(); 
    } 
} 

Затем я создаю все поддельные-объекты в испытательной установке и построить свой класс тестируемых с этими подделками:

public class InsertingTest 
{ 
    private Inserting _inserting; 
    private ISharedData _fakeSharedData; 
    private ITransactionService _fakeTransactionService;   

    [SetUp] 
    public void SetUp() 
    { 
     _fakeTransactionService = A.Fake<ITransactionService>(); 
     _fakeSharedData = A.Fake<ISharedData>(); 

     _inserting = new Inserting(_fakeTransactionService, _fakeSharedData); 
    } 

    [Test] 
    public void TestEnter() 
    { 
     // Arrange 

     // Act 
     _inserting.Enter(); 

     // Assert 
     A.CallTo(() => _fakeTransactionService.StartTransaction().MustHaveHappened(); 
    } 
} 

Но я видел в Java -Мировой, что при использовании Mockito и Кинжал 2, вы можете сделать что-то вроде этого:

public class PhoneDialer { 
    private Activity activity; 
    private PhoneCallListener phoneCallListener; 

    @Inject 
    public PhoneDialer(Activity activity, PhoneCallListener phoneCallListener) { 
     this.activity = activity; 
     this.phoneCallListener = phoneCallListener; 
    } 
} 

public class PhoneDialerTest { 
    @Rule 
    public MockitoRule mockitoRule = MockitoJUnit.rule(); 

    @Mock 
    PhoneCallListener phoneCallListener; 

    @Mock 
    Activity activity; 

    @InjectMocks 
    PhoneDialer dialer; 

    @Test 
    public void test_dialer() throws Exception { 
     // Arrange 

     // Act 
     dialer.callNumber("abc"); 

     // Assert 
     Mockito.verify(phoneCallListener, times(1)).startCall(); 
    } 
} 

и издевались с салаты автоматически инициализируются подделками. Есть ли эквивалентная процедура или функция в C# с FakeItEasy?

ответ

3

Я думаю, что вы хотите что-то вроде Automatically inject fakes in test fixture with FakeItEasy. Вы используете [Fake] для маркировки подделок для инъекций и [UnderTest], чтобы отметить тип производства для тестирования.

Мы действительно должны положить это в документацию.

В качестве альтернативы,

+0

Ohhhhh да! Это именно то, что я искал. Пожалуйста, поместите его в документацию. –

+1

Ну, я сделал [issue 964] (https://github.com/FakeItEasy/FakeItEasy/issues/964) как минимум. –

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