Издевательский статический метод в классе Enum с помощью MockitoJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Издевательский статический метод в классе Enum с помощью Mockito

Сообщение Anonymous »

пытаюсь имитировать статический метод с помощью Mockito,
я пытаюсь имитировать метод:
CloudFrontUrlSigner.getSignedURLWithCannedPolicy
https://docs.aws.amazon.com/AWSJavaSDK /latest/javadoc/com/amazonaws/services/cloudfront/CloudFrontUrlSigner.html
При запуске теста он неоднократно не может имитировать и входит в метод, выдавая исключение,
Нет конечно, где я ошибаюсь, чтобы обеспечить правильное совпадение предложения if,
буду очень благодарен за любую помощь.
Смоделировал сокращенную версию сервиса:
package com.example.demo.service;

import com.amazonaws.services.cloudfront.CloudFrontUrlSigner;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.net.URL;
import java.security.PrivateKey;

@Service
public class CloudFrontSigningService {

// defined this way for simplicity
PrivateKey privateKey = new PrivateKey() {
@Override
public String getAlgorithm() {
return null;
}

@Override
public String getFormat() {
return null;
}

@Override
public byte[] getEncoded() {
return new byte[0];
}
};

public CloudFrontSigningService() {
}

public URL generateSignedURL(String pathToSign){
// String here for simplicity instead of Request with path, expirationSeconds etc
try {
Integer expirationSeconds = 20; // would be gotten from request passed in
String cloudFrontKeyPairId = "myKeyPairID";
String signedURL = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
pathToSign,
cloudFrontKeyPairId,
privateKey,
new DateTime(DateTimeZone.UTC).plusSeconds(expirationSeconds).toDate()
);
return new URL(signedURL);
} catch (IOException ex){
System.out.println("error generating signedURL : " + ex);
throw new Error("my error");
}
}

}

Мои попытки протестировать метод на данный момент
package com.example.demo.service;

import com.amazonaws.services.cloudfront.CloudFrontUrlSigner;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.junit.Assert;
import java.io.IOException;
import java.net.URL;
import java.security.PrivateKey;
import java.util.Date;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;

class CloudFrontSigningServiceTest {

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}

CloudFrontUrlSigner cloudFrontUrlSigner = mock(CloudFrontUrlSigner.class);

// inject some other mocks (removed for this example)
@InjectMocks
CloudFrontSigningService cloudFrontSigningService;

@Test
void testGenerateSignedURL_attempt1() {

String pathToSign = "s3://my-bucket-name/path/to/object.jpg";

Mockito.when(cloudFrontUrlSigner.getSignedURLWithCannedPolicy(
any(String.class),
any(String.class),
any(PrivateKey.class),
any(Date.class)
)
).thenReturn("http://example.cloudfront.net/path/to/object.jpg");

URL signedUrl = cloudFrontSigningService.generateSignedURL(pathToSign);
Assert.assertNotNull(signedUrl);
}

@Test
void testGenerateSignedURL_attempt2() throws IOException {
// Arrange
String pathToSign = "/some/path";
String cloudFrontKeyPairId = "myKeyPairID";
byte[] privateKey = "private_key_bytes".getBytes();

CloudFrontSigningService service = new CloudFrontSigningService();
CloudFrontUrlSigner signerMock = Mockito.spy(CloudFrontUrlSigner.class);
when(signerMock.getSignedURLWithCannedPolicy(
Mockito.eq(pathToSign),
Mockito.eq(cloudFrontKeyPairId),
Mockito.any(),
Mockito.any()
)).thenReturn("https://signed-url.example.com");

// Act
URL signedURL = service.generateSignedURL(pathToSign);

// Assert
assertNotNull(signedURL);
Mockito.verify(signerMock).getSignedURLWithCannedPolicy(
Mockito.eq(pathToSign),
Mockito.eq(cloudFrontKeyPairId),
Mockito.any(),
Mockito.any()
);
}

}

Зависимости, которые я использую

com.amazonaws
aws-java-sdk-cloudfront
1.12.649


junit
junit
test


org.mockito
mockito-core
test
5.11.0


org.mockito
mockito-inline
test
5.2.0



Подробнее здесь: https://stackoverflow.com/questions/784 ... th-mockito
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»