Как заставить метод в Groovy выдать исключение - PullRequest
3 голосов
/ 26 января 2012

Я хотел написать тест для метода в Groovy, который выбрасывает IOException.Единственный способ для меня смоделировать это в тесте - заставить метод вызвать это исключение. Вот как выглядит оригинальный код:

    public void cleanUpBermudaFiles(RequestMessage requestMessage)

    {
    final File sourceDirectory = new  File(preferenceService.getPreference("bermuda.landingstrip") + File.separator + requestMessage.getWorkflowId().getValue());

    if(sourceDirectory!=null && sourceDirectory.exists())
    {
         deleteDirectory(sourceDirectory);
    }
    else
    {
        LOG.error("Directory must exist in order to delete");
    }

}

private void deleteDirectory(File directoryToDelete)
{
    try {
        FileUtils.deleteDirectory(directoryToDelete);
    } catch (Exception e) {
        LOG.error("Failed to delete Bermuda files directory located at:" + directoryToDelete.getPath() + "with an exception" + e.getMessage());
    }
}

МОЙ ТЕСТ: (Я ищу способсделать deleteDirectory бросить IOException)

     public void testCleanUpBermudaFailure()
    {
    workflowId = new WorkflowId("123456")
    workflowDirectory = new File(srcDirectory, workflowId.value)
    workflowDirectory.mkdir()
    File.createTempFile('foo','.lst', workflowDirectory)
    def exception = {throw new IOException()}

    expect(mockRequestMessage.getWorkflowId()).andReturn(workflowId)
    expect(mockPreferenceService.getPreference("bermuda.landingstrip")).andReturn(srcDirectory.path)
    replay(mockPreferenceService, mockRequestMessage)
    fileCleanUpService.preferenceService = mockPreferenceService
    fileCleanUpService.metaClass.deleteDirectory = exception
    fileCleanUpService.cleanUpBermudaFiles(mockRequestMessage)
    verify(mockPreferenceService, mockRequestMessage)
    assert srcDirectory.listFiles().length == 0, 'CleanUp failed'

}

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Если класс обслуживания является классом Groovy, вы хотите смоделировать FileUtils, например:

FileUtils.metaClass.static.deleteDirectory = { File f -> throw new IOException() }

Однако, как указал ataylor, вы не можете перехватывать вызовы, если это класс Java.Вы можете найти хороший пост в блоге об этом здесь .

0 голосов
/ 26 января 2012

Вы издеваетесь над вызовом без аргументов deleteDirectory, но реальное deleteDirectory принимает один аргумент типа File.Попробуйте это:

def exception = { File directoryToDelete -> throw new IOException() }
...
fileCleanUpService.metaClass.deleteDirectory = exception
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...