У меня есть этот класс:
SqssReadderApp
@Autowired
private Source source;
@Autowired
private AWSProperties awsProperties;
@Autowired
private AuditRepository auditRepository;
private AmazonSQS sqs;
@Autowired
public SqssreaderApplication(AWSConfig awsConfig) {
this.sqs = awsConfig.generateSQS();
}
Вызывает метод generateSQS () из своего конструктора. SQS генерируется путем вызова статического метода.
Вот соответствующий класс, содержащий метод:
@Autowired
private AWSProperties awsProperties;
@Bean
AmazonSQS generateSQS() {
return AmazonSQSClientBuilder.standard()
.withRegion(awsProperties.getQueueRegion())
.build();
}
Теперь в моем тестовом классе я пытаюсь смоделировать этот вызов метода generateSQS (), введя mockAwsConfig.
Я думаю, что есть два подхода для внедрения экземпляра mockSqs в SqssReaderApplication.
Подход 1:
Я вставляю mockAwsConfig в конструктор и инициализирую его следующим правилом:
when(mockAwsConfig.generateSQS()).thenReturn(mockSQS);
SqssReaderApplication app = new SqssReaderApplication(mockAwsConfig);
Проблема:
Все ремианирующие (@Autowired) сущности остаются нулевыми.
Подход 2:
Я @Autowired SqssReaderApplication, все другие поля являются ложными, но экземпляр sqs в SqssReaderApplication остается нулевым.
**TestClass**:
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest
@ContextConfiguration(classes = {SqssreaderApplication.class,
DefaultFrameworkSupport.class, AWSConfig.class, AuditRepository.class, FileProcessAuditLog.class})
public class SqssreaderApplicationTests {
@Autowired
private Source source;
@MockBean
AuditRepository auditRepository;
@Mock
private AmazonSQSClient amazonSQS;
@Mock
private AWSConfig awsConfig;
@InjectMocks
private SqssreaderApplication app;
@Mock
private AWSProperties awsProperties;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
when(awsConfig.generateSQS()).thenReturn(amazonSQS);
app = new SqssreaderApplication(awsConfig);
}
Я видел и другие ответы, но они не работают в этом сценарии.
Какой может быть другой подход к этой проблеме? Как я должен вводить макеты в SqssReaderApp, желательно без использования PowerMock или изменения исходного кода?