mocking url.openStream () должен возвращать InputStream - PullRequest
0 голосов
/ 07 мая 2019

Фактический класс, принимающий URL-адрес в качестве входных данных и вызывающий url.openStream (), должен возвращать InputStream.

public static Map<String, Object> parseA(URL url) throws Exception {
   byte[] readData = new byte[25*1024*1024];
    // Here url.openStream() returning null
            InputStream is = url.openStream();

            while((readLength = is.read(readData, 0, 25*1024*1024)) != -1){
                br = new BufferedReader(new InputStreamReader(new 
    ByteArrayInputStream(readData)));

                // All CW_* strings are collected first
}

Мой тестовый класс

 @Rule
    public TemporaryFolder folder= new TemporaryFolder();
 @Test(enabled = true)
    public void parseATest() {

            File file=null;
           try {
             file =folder.newFile("testingData.txt");
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

            final URLConnection mockConnection = EasyMock.createMock(URLConnection.class);
            final URLStreamHandler handler = new URLStreamHandler() {

                @Override
                protected URLConnection openConnection(final URL arg0)
                        throws IOException {
                    return mockConnection;
                }
            };
            URL url=null;
            try {
                url = new URL("http://foo.bar", "foo.bar", 80, "", handler);
            } catch (MalformedURLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            InputStream is=null;
            try {
                is = new FileInputStream(file);
            } catch (FileNotFoundException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            } 
            try {
                EasyMock.expect(url.openStream()).andReturn(is).anyTimes();
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        try {
             // imageHeaderParser is object of actual class
            imageHeaderParser.parseA(url);
        } catch (IfmSwimParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

Здесь TemporaryFolder используется для создания временного файла. И я не хочу, чтобы URL шел по сети. Это может быть просто фиктивный URL, и когда я вызываю url.openStream (), он должен возвращать поток упомянутого временного файла.

1 Ответ

1 голос
/ 07 мая 2019

Файл может быть преобразован в URL, так что просто сделайте это:

Url testUrl = Paths.get("folder",("testingData.txt").toUri().toURL();
Map<String, Object> map = parseA(testUrl);
// assert map content

Кроме того, вам не нужны никакие насмешки, если вы хотите протестировать поведение при обработке файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...