Тестовые случаи Junit не удались для статического метода с java.lang.NoSuchFieldError: ошибка PASCAL_CASE_TO_CAMEL_CASE ⇐ JAVA
Тестовые случаи Junit не удались для статического метода с java.lang.NoSuchFieldError: ошибка PASCAL_CASE_TO_CAMEL_CASE
создание объекта sqs для публикации сообщения в очереди sqs.
public final class ClientFactory {
private SqsClientFactory() {
throw new ConstructorCallForbiddenException();
}
public static AmazonSQS buildSqs(String awsRegion) {
String regionName = Optional.ofNullable(awsRegion).filter(StringUtils::isNotBlank).orElseGet(() -> {
var region = Regions.getCurrentRegion();
if (region != null) {
return region.getName();
}
throw SqsClientException.regionNotAvailable();
});
return AmazonSQSClientBuilder.standard().withRegion(regionName).build();
}
}
Это наш основной класс, в котором мы отправляем сообщение в amazon sqs, и в первой строке метода мы пытаемся установить макетный объект sqs из UT.
@Component
@Slf4j
public class Publisher {
public void sendMessageToSqs(String eventPayload) {
AmazonSQS sqs = SqsClientFactory.buildSqsClient(awsRegion);
try {
Optional eventAsJsonOpt = formatErrorEventAsJson(eventPayload);
eventAsJsonOpt.ifPresent(eventJson -> {
var smr = sqs.sendMessage(new SendMessageRequest()
.withQueueUrl(queueUrl));
log.info("successfully published to SQS");
});
} catch (Exception e) {
log.error("Message failed to post into SQS queue : {} ", e);
}
}
}
там, когда мы пытались установить статический метод return для имитации Amazon sqs, затем возвращалась ошибка. даже мы попробовали использовать статический подход, тогда он сказал, что тип возвращаемого значения должен быть MockitoStatic. Проверка, а не Amazon sqs
@ExtendWith(MockitoExtension.class)
public class SqsPublisherTest {
@Mock
private AmazonSQS sqs;
@InjectMocks
private Publisher publisher;
@Test
public void testSQSClientBuilder() {
try (MockedStatic mockedBuilder = mockStatic(AmazonSQSClientBuilder.class)) {
AmazonSQSClientBuilder mockBuilder = mock(AmazonSQSClientBuilder.class);
mockedBuilder.when(AmazonSQSClientBuilder::standard).thenReturn(mockBuilder);
when(mockBuilder.withRegion("us-east-1")).thenReturn(mockBuilder);
when(mockBuilder.build()).thenReturn(sqs);
when(SqsClientFactory.buildSqsClient("us-east-1")).thenReturn(sqs);
publisher.sendMessageToSqs(Mockito.anyString());
}
}
зависимости maven pom для тестовых случаев junit
pom.xml
org.mockito
mockito-junit-jupiter
5.14.1
test
org.springframework.boot
spring-boot-starter-test
test
Подробнее здесь: https://stackoverflow.com/questions/791 ... error-pasc
создание объекта sqs для публикации сообщения в очереди sqs.
public final class ClientFactory {
private SqsClientFactory() {
throw new ConstructorCallForbiddenException();
}
public static AmazonSQS buildSqs(String awsRegion) {
String regionName = Optional.ofNullable(awsRegion).filter(StringUtils::isNotBlank).orElseGet(() -> {
var region = Regions.getCurrentRegion();
if (region != null) {
return region.getName();
}
throw SqsClientException.regionNotAvailable();
});
return AmazonSQSClientBuilder.standard().withRegion(regionName).build();
}
}
Это наш основной класс, в котором мы отправляем сообщение в amazon sqs, и в первой строке метода мы пытаемся установить макетный объект sqs из UT.
@Component
@Slf4j
public class Publisher {
public void sendMessageToSqs(String eventPayload) {
AmazonSQS sqs = SqsClientFactory.buildSqsClient(awsRegion);
try {
Optional eventAsJsonOpt = formatErrorEventAsJson(eventPayload);
eventAsJsonOpt.ifPresent(eventJson -> {
var smr = sqs.sendMessage(new SendMessageRequest()
.withQueueUrl(queueUrl));
log.info("successfully published to SQS");
});
} catch (Exception e) {
log.error("Message failed to post into SQS queue : {} ", e);
}
}
}
там, когда мы пытались установить статический метод return для имитации Amazon sqs, затем возвращалась ошибка. даже мы попробовали использовать статический подход, тогда он сказал, что тип возвращаемого значения должен быть MockitoStatic. Проверка, а не Amazon sqs
@ExtendWith(MockitoExtension.class)
public class SqsPublisherTest {
@Mock
private AmazonSQS sqs;
@InjectMocks
private Publisher publisher;
@Test
public void testSQSClientBuilder() {
try (MockedStatic mockedBuilder = mockStatic(AmazonSQSClientBuilder.class)) {
AmazonSQSClientBuilder mockBuilder = mock(AmazonSQSClientBuilder.class);
mockedBuilder.when(AmazonSQSClientBuilder::standard).thenReturn(mockBuilder);
when(mockBuilder.withRegion("us-east-1")).thenReturn(mockBuilder);
when(mockBuilder.build()).thenReturn(sqs);
when(SqsClientFactory.buildSqsClient("us-east-1")).thenReturn(sqs);
publisher.sendMessageToSqs(Mockito.anyString());
}
}
зависимости maven pom для тестовых случаев junit
pom.xml
org.mockito
mockito-junit-jupiter
5.14.1
test
org.springframework.boot
spring-boot-starter-test
test
Подробнее здесь: https://stackoverflow.com/questions/791 ... error-pasc
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение