Как убить отрицаемого условно выжившего мутанта

У меня есть этот код, который я хочу протестировать и получить максимальное покрытие ямы, но я не могу убить мутанта для отрицательного условия, если (закрыть). Я также использую mockito, чтобы создать исключение.

public static void copyBytes(InputStream in, OutputStream out, int buffSize, boolean close) throws IOException {
        try {
            copyBytes(in, out, buffSize);
            if (close) {
                out.close();
                out = null;
                in.close();
                in = null;
            }
        } finally {
            if (close) {
                closeStream(out);
                closeStream(in);
            }
        }
    }

Это мои тесты:

@Test
        public void mockOutputCopyBytes1False(){
            try{
                OutputStream outputStream = Mockito.mock(OutputStream.class);
                doThrow(new IOException()).when(outputStream).close();
                copyBytes(createInputStream(), outputStream, 50, false);
                outputStream.write(10);
            }catch (Exception e){
                e.printStackTrace();
                Assert.assertEquals(IOException.class, e.getClass());
            }
        }

    @Test
    public void mockOutputCopyBytes1True(){
        try{
            OutputStream outputStream = Mockito.mock(OutputStream.class);
            doThrow(new IOException()).when(outputStream).close();
            copyBytes(createInputStream(), outputStream, 50, true);
            outputStream.write(10);
        }catch (Exception e){
            e.printStackTrace();
            Assert.assertEquals(IOException.class, e.getClass());
        }
    }

person leop    schedule 04.12.2020    source источник
comment
В чем проблема? Вы получаете исключение в коде, который закрывает потоки?   -  person stridecolossus    schedule 04.12.2020
comment
моя цель - убить всех мутантов, созданных ямой, я не могу убить тех, кто находится в яме, если (закрыть), в отчете ямы говорится, что условное отрицание → ВЫЖИЛ   -  person leop    schedule 04.12.2020


Ответы (1)


Предложение finally выполняется независимо от того, работает код или выдает исключение, нет необходимости кодировать для обоих случаев:

public static void copyBytes(InputStream in, OutputStream out, int buffSize, boolean close) throws IOException {
        try {
            copyBytes(in, out, buffSize);
            // TODO - remove the following
            //if (close) {
            //    out.close();
            //    out = null;
            //    in.close();
            //    in = null;
            //}
        } finally {
            if (close) {
                closeStream(out);
                closeStream(in);
            }
        }
    }
person stridecolossus    schedule 04.12.2020
comment
это не мой код, я должен проверить этот метод для университетского проекта - person leop; 04.12.2020