@Test
  public void testAllInjectionElementsArePopulated() {
    // given
    when(mockedMockEngine.createMock(Object.class)).thenReturn(new Object());
    engine = new InjectionEngine(mockedMockEngine);

    // when
    SutDescriptor<ClassWithAllTypesOfInjectionElements> sutDescriptor =
        engine.createAndInject(
            ClassWithAllTypesOfInjectionElements.class, new AnnotatedInjectionPoint(Inject.class));

    // then
    assertThat(sutDescriptor).isNotNull();
    assertThat(sutDescriptor.getMocks()).hasSize(5);

    ClassWithAllTypesOfInjectionElements sut = sutDescriptor.getSystemUnderTest();

    assertThat(sut.getFieldInjectionPoint()).isNotNull().isInstanceOf(Object.class);
    assertThat(sut.getNotMeantForInjection()).isNull();
    assertThat(sut.getUsedBySetterInjector()).isNotNull();
    assertThat(sut.getUsedByPrivateSetterInjector()).isNotNull();

    assertThat(sut.getFirstArgSetByCtor()).isNotNull();
    assertThat(sut.getSecondArgSetByCtor()).isNotNull();
  }
  @Test
  public void testNoArgumentsCtorIsUsedAndFieldsAreSettersInjectionElementsAreUsed() {
    // given
    when(mockedMockEngine.createMock(Object.class))
        .thenReturn(new Object())
        .thenReturn(new Object())
        .thenReturn(new Object());

    // when
    SutDescriptor<ClassWithFieldAndSetterInjectionElements> sutDescriptor =
        engine.createAndInject(
            ClassWithFieldAndSetterInjectionElements.class,
            new AnnotatedInjectionPoint(Inject.class));

    // then
    assertThat(sutDescriptor).isNotNull();
    assertThat(sutDescriptor.getSystemUnderTest()).isNotNull();

    ClassWithFieldAndSetterInjectionElements sut = sutDescriptor.getSystemUnderTest();

    assertThat(sut.getFieldInjectionPoint()).isNotNull().isInstanceOf(Object.class);
    assertThat(sut.getNotMeantForInjection()).isNull();

    assertThat(sut.getUsedBySetterInjector()).isNotNull();
    assertThat(sut.getUsedByPrivateSetterInjector()).isNotNull();
  }