2015-02-04 3 views
1

Я хотел бы написать некоторые государственные тесты, используя JMockit, чтобы макет CSVRecord. Проблема в том, что JMockit - final (что означает, что я должен использовать насмешливую структуру, такую ​​как JMockit) и CSVRecord's Конструктор имеет индивидуальную видимость пакета.Как мне высмеять класс, отмеченный как final, и имеет частный конструктор, используя jMockit

Так как это закрытый пакет, я не могу назвать новый CSVRecord(arg, arg, ...), что означает, что я никогда не смогу создать экземпляр моего макета. Его родитель, CSVParser, является единственным классом, который может создать экземпляр.

Есть ли у JMockit способ справиться с этим сценарием?

примечание: JMockit или Mockito - единственные рамки, которые мы используем в этом проекте. Никакие другие рамки не будут приемлемыми. Я предпочитаю использовать MockUp.

ответ

1

Это больше похоже на CSVRecord, не является хорошим кандидатом на насмешку. Если возможно, предпочтение будет отдано тестированию другого открытого класса, который использует его внутренне.

В противном случае JMockit предоставляет класс Deencapsulation с методами newInstance.

В качестве побочного примечания Mockito поддерживает только тесты на основе поведения; JMockit предоставляет «макеты» (MockUp), но это не то же самое, что писать чистый тест на ядро ​​черного цвета.

+0

Спасибо. Можно ли показать решение с помощью Deencapsulation.newInstance, чтобы получить ссылку на CSVRecord? – MedicineMan

+0

Просто назовите его передачей 'CSVRecord.class' в качестве первого аргумента, за которым следуют любые другие аргументы, которые имеет желаемый конструктор в' CSVRecord'. –

0

Если речь идет только о вызове частного конструктора, то да, у JMockit есть инструменты для решения этого. См. tutorial

Смежные вопросы