Я пытаюсь протестировать класс реализации, в котором я создаю автоматическую разводку на основе конструктора для интерфейса.
Я не думаю, чтобы изменить этот класс или способ, которым он подключен автоматически.
При написании тестовых примеров для класса реализации я получаю исключение 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) и когда
Класс реализации называется repositoryInterface DomainClass getDetDocument =repositoryInterface.findById( Id ).orElse( null );
в ВнедрениеКласс имеет ссылочное значение (23425634534 @ 1879). Из-за этого я получаю null
для getDetDocument.