Насмешки лучше, чем тупики?

Это всего лишь предупреждение, вы можете его игнорировать. Искра и pyspark могут быть использованы без hadoop.

Вы можете взять цикл по этой ссылке:

https://community.hortonworks.com/questions/19897/apache-spark-error-unable-to-load-native-hadoop -li.html

14
задан Bjorn Reppen 6 September 2008 в 19:13
поделиться

6 ответов

Когда молитва идет, 'Идут с самой простой вещью, которая может возможно работать'.

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

Избегают использования насмешек всегда , потому что они делают тесты хрупкими. Ваши тесты теперь имеют сложное знание методов, названных реализацией, если дразнивший интерфейс или Ваша реализация изменяют... Ваше тестовое повреждение. Это плохо, потому что Вы проведете дополнительное время, заставляя Ваши тесты работать вместо того, чтобы просто заставить Ваш SUT работать. Тесты не должны быть неуместно близкими с реализацией.
Так используют Ваше лучшее суждение.. Я предпочитаю насмешки, когда это поможет сохранить меня обновление записи поддельный класс с n>> 3 метода.

Обновление Эпилог/Обдумывание:
(Благодаря Toran Billups, например, теста mockist. Посмотрите ниже)
Привет Doug, Хорошо я думаю, что мы превысили в другую священную войну - Классик TDDers по сравнению с Mockist TDDers. Я думаю, что я, принадлежат первому.

  • , Если я нахожусь на test#101 Test_ExportProductList и я нахожу, что должен добавить новый параметрический усилитель к IProductService. GetProducts (). Я делаю, которые получают этот зеленый тест. Я использую инструмент рефакторинга для обновления всех других ссылок. Теперь я нахожу, что все тесты mockist, звоня этому участнику теперь аварийно завершаются. Затем я должен возвратиться и обновить все эти тесты - пустая трата времени. Почему ShouldPopulateProductsListOnViewLoadWhenPostBackIsFalse перестал работать? Это было, потому что код взломан? Скорее тесты повреждаются. Я одобряю один отказ при испытании = 1 место для фиксации . Насмешка частоты идет вразрез с этим. Тупики были бы лучше? Если это у меня был fake_class. GetProducts ().. уверенный Одно место для изменения вместо хирургии ружья по нескольким Ожидают вызовы. В конце это - вопрос стиля.. если у Вас был общий служебный метод MockHelper. SetupExpectForGetProducts () - это было бы также достаточно.. но Вы будете видеть, что это редко.
  • при размещении белой полосы в тестовое имя тест трудно считать. Партия инфраструктуры кода для ложной платформы скрывает фактический выполняемый тест.
  • требует, чтобы Вы изучили эту конкретную разновидность платформы насмешки
12
ответ дан 1 December 2019 в 10:05
поделиться

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

, Например, в ниже теста, Вы замечаете, что я гашу представление, таким образом, я могу проверить, что значение свойства установлено (основанное на состоянии тестирование). Я затем создаю динамическую насмешку для класса обслуживания, таким образом, я могу удостовериться, что определенный метод называют во время теста (взаимодействие / основанное на поведении тестирование).

<TestMethod()> _
Public Sub Should_Populate_Products_List_OnViewLoad_When_PostBack_Is_False()
    mMockery = New MockRepository()
    mView = DirectCast(mMockery.Stub(Of IProductView)(), IProductView)
    mProductService = DirectCast(mMockery.DynamicMock(Of IProductService)(), IProductService)
    mPresenter = New ProductPresenter(mView, mProductService)
    Dim ProductList As New List(Of Product)()
    ProductList.Add(New Product())
    Using mMockery.Record()
        SetupResult.For(mView.PageIsPostBack).Return(False)
        Expect.Call(mProductService.GetProducts()).Return(ProductList).Repeat.Once()
    End Using
    Using mMockery.Playback()
        mPresenter.OnViewLoad()
    End Using
    'Verify that we hit the service dependency during the method when postback is false
    Assert.AreEqual(1, mView.Products.Count)
    mMockery.VerifyAll()
End Sub
2
ответ дан 1 December 2019 в 10:05
поделиться

Я обычно предпочитаю использовать насмешки из-за Ожиданий. При вызове метода на тупике, который возвращает значение, это обычно просто дает Вам, поддерживают значение. Но когда Вы называете метод на насмешке, мало того, что это возвращает значение, это также осуществляет ожидание, что Вы настраиваете это, метод даже назвали во-первых. Другими словами, если Вы настраиваете ожидание и затем не называете тот метод, исключение выдается. При установке ожидания Вы по существу говорите, "Если этот метод не становится названным, что-то пошло не так, как надо". И противоположное верно, если Вы назовете метод на насмешке и не установите ожидание, то оно выдаст исключение, по существу говоря "Эй, что Вы делаете вызов этого метода, когда Вы не ожидали это".

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

Одно допустимое место для использования тупиков я могу думать от вершины, тем не менее, когда Вы вводите тестирование в унаследованный код. Иногда просто легче сделать тупик путем разделения на подклассы класса, который Вы тестируете, чем рефакторинг всего для создания насмешки легкой или даже возможной.

И к этому...

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

... Я говорю, изменяется ли мой интерфейс, мои тесты должны повредиться. Поскольку смысл модульных тестов - то, что они точно тестируют мой код, поскольку он существует прямо сейчас.

8
ответ дан 1 December 2019 в 10:05
поделиться

Лучше использовать комбинацию, и необходимо будет использовать собственное решение. Вот инструкции, которые я использую:

  • , Если звонок внешнему коду является частью Вашего кода, ожидал (стоящее исходящим образом) поведение, это должно быть протестировано. Используйте насмешку.
  • , Если вызов является действительно деталью реализации, о которой внешний мир не заботится, предпочитает тупики. Однако:
  • , Если Вы волнуетесь, что более поздние реализации протестированного кода могли бы случайно обойти Ваши тупики, и Вы хотите заметить, происходит ли это, используйте насмешку. Вы связываете свой тест с Вашим кодом, но это ради того, чтобы замечать, что Ваш тупик больше не достаточен, и Вашему тесту нужна переделка.

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

И снова, это - запах кода и последнее средство. Если Вы находите, что необходимо часто делать это, попытаться заново продумать путь, Вы пишете свои тесты.

2
ответ дан 1 December 2019 в 10:05
поделиться

Обсуждение Read Luke Kanies точно этого вопроса в это сообщение в блоге . Он ссылается сообщение от Полей Сойки , который даже предполагает, что с помощью [эквивалент рубину/мокко] stub_everything предпочтителен для создания тестов более устойчивыми. Заключить заключительные слова Полей в кавычки: "Мокко делает столь же легким определить насмешку, как это должно определить тупик, но это не означает, что необходимо всегда предпочитать насмешки. На самом деле я обычно предпочитаю тупики и использую насмешки когда необходимый".

1
ответ дан 1 December 2019 в 10:05
поделиться

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

Для более подробного обсуждения рассмотрите возможность взглянуть на http://www.mockobjects.com/book

2
ответ дан 1 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

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