【发布时间】:2018-01-20 14:12:48
【问题描述】:
根据我的要求,我必须使用预签名 URL 将文件上传到 Amazon S3,我从 AWS 网站获得了对我有用的代码,但现在我必须为我在其中编写 JUnit使用 PowerMockito 模拟 java.net。网址,但它根本不起作用。以下是我的 Java 代码加上不工作的 JUnit。谁能给我解决方案我应该如何进行?提前致谢。
我的代码:-
public class App {
public Boolean uploadToS3(String presignedUrl, String jsonBody) {
try {
URL url = new URL(presignedUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write(jsonBody);
out.close();
int responseCode = connection.getResponseCode();
System.out.println("Service returned response code " + responseCode);
return true;
} catch (IOException io) {
io.printStackTrace();
}
return false;
}
}
JUnit
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({URL.class,HttpURLConnection.class,OutputStreamWriter.class,OutputStream.class})
public class AppTest
{
@InjectMocks
App app;
@Test
public void uploadToS3_should_return_true() throws Exception{
App app = new App();
//App app = PowerMockito.mock(App.class);
URL url = PowerMockito.mock(URL.class);
HttpURLConnection connection = PowerMockito.mock(HttpURLConnection.class);
OutputStreamWriter outStreamWriter = PowerMockito.mock(OutputStreamWriter.class);
OutputStream outStream = PowerMockito.mock(OutputStream.class);
PowerMockito.whenNew(URL.class).withArguments(Matchers.anyString()).thenReturn(url);
PowerMockito.when(url.openConnection()).thenReturn(connection);
PowerMockito.whenNew(OutputStreamWriter.class).withArguments(Matchers.any()).thenReturn(outStreamWriter);
PowerMockito.when(connection.getOutputStream()).thenReturn(outStream);
PowerMockito.when(connection.getResponseCode()).thenReturn(201);
app.uploadToS3("http://something.com", "{}");
}
}
【问题讨论】:
标签: java amazon-s3 mockito junit4 powermock