Junit Mockito NullPointerException для Mock для автоматического подключения на основе конструктора

Сэм:

Я пытаюсь протестировать класс реализации, в котором я создаю автоподключение на основе конструктора для интерфейса. Я не собираюсь менять этот класс или способ его автоматического подключения.

При написании тестовых примеров для класса реализации я получаю исключение NullPointerException, потому что объект, созданный в классе реализации, имеет другую ссылку на объект, а фиктивный объект имеет другое значение ссылки.

Может ли кто-нибудь сказать мне, как издеваться над объектом.

Класс реализации

public class ImplementationClass implements ClientClass {

private final RepositoryInterface repositoryInterface;
@Autowired
public ImplementationClass( RepositoryInterface repositoryInterface ) {
    this.repositoryInterface = repositoryInterface;
}
@Autowired
AAA aaa;

@Autowired
BBB bbb;

@Autowired
CCC ccc;

public DomainClass getDetails( String Id ) {
    // aaa, bbb, ccc usage
    DomainClass getDetDocument =
        repositoryInterface.findById( Id ).orElse( null );

}

Класс модульного теста

@Mock
RepositoryInterface repositoryInterface;

@Mock
DomainClass DomainClass;

@Mock
AAA aaa;

@Mock
BBB bbb;

@Mock
CCC ccc;

@InjectMocks
ImplementationClass implementationClass;

@Before
public void setUp() {
    MockitoAnnotations.initMocks( this );
    }

 @Test
public void getDetTest() {
DomainClass dc = new DomainClass();
    dc.setId( "Id-123456789" );
    dc.setDetailsList( <Some list> );

    Optional<DomainClass> c1 = Optional.of( dc );
    // when().thenReturn(); // aaa, bbb, ccc usage
when( repositoryInterface.findById( "Id-123456789" )).thenReturn( c1 );
    DomainClass c2 = implementationClass.getDetails( "Id-123456789" );

    assertThat( c2.getDetailsList(), equalTo( c1.getDetailsList() ) );
}

ОБНОВЛЕНИЕ: при отладке класса Test объект repositoryInterface when( repositoryInterface.findById( "Id-123456789" )).thenReturn( c1 ); создает эталонное значение (23425634534 @ 2005), а при вызове класса ImplementationClass интерфейс repositoryInterface DomainClass getDetDocument =repositoryInterface.findById( Id ).orElse( null ); в классе ImplementationClass имеет эталонное значение (23425634534 @ 1879). Из-за этого получаю nullза getDetDocument.

Сэм:

После всех исследований он заработал, изменив способ создания объекта конструктором.

// @Mock //removed this annotation
   RepositoryInterface repositoryInterface;


@Before
   public void setUp() {
     repositoryInterface = mock(RepositoryInterface.class)
     ImplementationClass = new ImplementationClass(repositoryInterface);
     MockitoAnnotations.initMocks( this );
}

Ссылка: https://mhaligowski.github.io/blog/2014/05/30/mockito-with-both-constructor-and-field-injection.html

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  3. 3

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  4. 4

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  5. 5

    How to click an array of links in puppeteer?

  6. 6

    Merging legends in plotly subplot

  7. 7

    ViewPager2 мигает / перезагружается при смахивании

  8. 8

    Отчеты Fabric Debug Craslytic: регистрация, отсутствует идентификатор сборки, применить плагин: io.fabric

  9. 9

    How to normalize different curves drawn with geom = "step" when using stat_summary

  10. 10

    无法通过Vue在传单中加载pixiOverlay

  11. 11

    как я могу удалить vue cli 2?

  12. 12

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  13. 13

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  14. 14

    Elasticsearch - Нечеткий поиск не дает предложения

  15. 15

    Single legend for Plotly subplot for line plots created from two data frames in R

  16. 16

    Описание моего типа Parser как серии преобразователей монад

  17. 17

    Как изменить цвета запятых и скобок в VS Code

  18. 18

    Сброс значения <input type = "time"> в Firefox

  19. 19

    Почему прокси в vue.config.js 404

  20. 20

    Как установить параметр -noverify с gradle ktx для робоэлектрических тестов Android?

  21. 21

    В чем разница между ifstream, ofstream и fstream?

популярныйтег

файл