Насмешка URL в Java

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

Фактически вы можете проверить это самостоятельно, указав модуль с расширением Safe:

{-#LANGUAGE Safe#-}

data Test = Test deriving (Eq, Show)

И затем попробуйте его в ghci:

λ> :i Test
data Test = Test    
instance [safe] Eq Test 
instance [safe] Show Test 

Но обратите внимание, что в текущем GHC (7.10.2) безопасное расширение не может быть связано с гарантией доверия, потому что из этой ошибки ghc .

20
задан bowsie 19 February 2009 в 14:26
поделиться

5 ответов

Когда у меня есть класс, который нельзя легко дразнить, потому что это является окончательным (или впаянный C#), мой обычный маршрут должен записать обертку вокруг класса и использовать обертку везде, где я использовал бы фактический класс. Затем я дразнил бы класс обертки по мере необходимости.

19
ответ дан 29 November 2019 в 06:25
поделиться

Я использовал URLHandler, который позволяет мне загружать URL из пути к классу. Таким образом, следующий

new URL("resource:///foo").openStream()

открыл бы файл, названный нечто из пути к классу. Чтобы сделать это, я пользуюсь общая служебная библиотека и регистрирую обработчик. Для использования этого обработчика просто необходимо звонить:

com.healthmarketscience.common.util.resource.Handler.init();

и URL ресурса теперь доступно.

7
ответ дан 29 November 2019 в 06:25
поделиться

Я посмотрел бы снова на то, почему Вы хотите дразнить заключительный объект данных. Так как по определению Вы не разделяете объект на подклассы в своем фактическом коде, и это не будет объектом под тестом, Вы не должны должны быть к белому полю тестировать этот код; просто передача в любых (реальных) объектах URL является соответствующей, и проверяет вывод.

Фиктивные объекты полезны, когда трудно создать реальный соответствующий объект, или метод реального объекта являются или трудоемкими или зависят от некоторого внешнего ресурса с сохранением информации (как база данных). Ни один из них не применяется в этом случае, таким образом, я не вижу, почему Вы не можете только создать реальный объект URL представление соответствующего местоположения ресурса.

2
ответ дан 29 November 2019 в 06:25
поделиться

Класс URL реализует интерфейс? Раз так затем Вы могли инстанцировать его с помощью инверсии управления или настраиваемой фабрики, а не прямой конструкцией, это позволит Вам вводить/создавать тестовый экземпляр в тестовом времени выполнения, а не заключительный экземпляр, который Вы в настоящее время имеете.

0
ответ дан 29 November 2019 в 06:25
поделиться

JMockit действительно позволяет имитировать последний класс JRE, такой как java.net.URL.

Кажется, что Attach API в jdkDir / lib / tools.jar доступен в реализациях JDK 1.6 кроме Sun тоже не работает. Я полагаю, что этот материал все еще слишком новый / продвинутый или просто не получил должного внимания со стороны других поставщиков JDK (Apple, IBM с J9 JDK, Oracle с JRockit JDK).

Итак, если вы столкнетесь с проблемы из-за наличия tools.jar в пути к классам, попробуйте использовать аргумент JVM "-javaagent: jmockit.jar". Он сообщает JVM напрямую загружать java-агент при запуске без использования Attach API. Это должно работать в Apple JDK 1.5 / 1.6.

2
ответ дан 29 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: