Это всего лишь предупреждение, вы можете его игнорировать. Искра и pyspark могут быть использованы без hadoop.
Вы можете взять цикл по этой ссылке:
Когда молитва идет, 'Идут с самой простой вещью, которая может возможно работать'.
Избегают использования насмешек всегда , потому что они делают тесты хрупкими. Ваши тесты теперь имеют сложное знание методов, названных реализацией, если дразнивший интерфейс или Ваша реализация изменяют... Ваше тестовое повреждение. Это плохо, потому что Вы проведете дополнительное время, заставляя Ваши тесты работать вместо того, чтобы просто заставить Ваш SUT работать. Тесты не должны быть неуместно близкими с реализацией.
Так используют Ваше лучшее суждение.. Я предпочитаю насмешки, когда это поможет сохранить меня обновление записи поддельный класс с n>> 3 метода.
Обновление Эпилог/Обдумывание:
(Благодаря Toran Billups, например, теста mockist. Посмотрите ниже)
Привет Doug, Хорошо я думаю, что мы превысили в другую священную войну - Классик TDDers по сравнению с Mockist TDDers. Я думаю, что я, принадлежат первому.
Это просто зависит от того, какое тестирование Вы делаете. При выполнении основанного на поведении тестирования, Вы могли бы хотеть динамическую насмешку, таким образом, можно проверить, что некоторое взаимодействие с зависимостью происходит. Но если Вы делаете основанное на состоянии тестирование, Вы могли бы хотеть тупик, таким образом, Вы проверяете значения/и т.д.
, Например, в ниже теста, Вы замечаете, что я гашу представление, таким образом, я могу проверить, что значение свойства установлено (основанное на состоянии тестирование). Я затем создаю динамическую насмешку для класса обслуживания, таким образом, я могу удостовериться, что определенный метод называют во время теста (взаимодействие / основанное на поведении тестирование).
<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
Я обычно предпочитаю использовать насмешки из-за Ожиданий. При вызове метода на тупике, который возвращает значение, это обычно просто дает Вам, поддерживают значение. Но когда Вы называете метод на насмешке, мало того, что это возвращает значение, это также осуществляет ожидание, что Вы настраиваете это, метод даже назвали во-первых. Другими словами, если Вы настраиваете ожидание и затем не называете тот метод, исключение выдается. При установке ожидания Вы по существу говорите, "Если этот метод не становится названным, что-то пошло не так, как надо". И противоположное верно, если Вы назовете метод на насмешке и не установите ожидание, то оно выдаст исключение, по существу говоря "Эй, что Вы делаете вызов этого метода, когда Вы не ожидали это".
Иногда Вы не хотите ожиданий по каждому методу, который Вы называете, таким образом, некоторые платформы насмешки позволят "частичные" насмешки, которые похожи на ложные/тупиковые гибриды, в том единственном осуществляются ожидания, которые Вы устанавливаете, и любой вызов метода рассматривают больше как тупик, в котором он просто возвращает значение.
Одно допустимое место для использования тупиков я могу думать от вершины, тем не менее, когда Вы вводите тестирование в унаследованный код. Иногда просто легче сделать тупик путем разделения на подклассы класса, который Вы тестируете, чем рефакторинг всего для создания насмешки легкой или даже возможной.
И к этому...
всегда Избегают использования насмешек, потому что они делают тесты хрупкими. Ваши тесты теперь имеют сложное знание методов, названных реализацией, если дразнивший интерфейс изменяет... Ваше тестовое повреждение. Так используйте свое лучшее суждение..<
... Я говорю, изменяется ли мой интерфейс, мои тесты должны повредиться. Поскольку смысл модульных тестов - то, что они точно тестируют мой код, поскольку он существует прямо сейчас.
Лучше использовать комбинацию, и необходимо будет использовать собственное решение. Вот инструкции, которые я использую:
второй вид насмешки является своего рода необходимым злом. Действительно, что продолжается, вот то, что, используете ли Вы тупик или насмешку, в некоторых случаях необходимо связать с кодом больше, чем Вы хотели бы. Когда это происходит, лучше использовать насмешку, чем тупик только потому, что Вы будете знать, когда та связь, которая повреждения и Ваш код больше не пишутся путем Ваш тест, думала, что это будет. Вероятно, лучше оставить комментарий в Вашем тесте, когда Вы делаете это так, чтобы, кто бы ни повреждается, это знало, что их код не является неверным, тест.
И снова, это - запах кода и последнее средство. Если Вы находите, что необходимо часто делать это, попытаться заново продумать путь, Вы пишете свои тесты.
Обсуждение Read Luke Kanies точно этого вопроса в это сообщение в блоге . Он ссылается сообщение от Полей Сойки , который даже предполагает, что с помощью [эквивалент рубину/мокко] stub_everything предпочтителен для создания тестов более устойчивыми. Заключить заключительные слова Полей в кавычки: "Мокко делает столь же легким определить насмешку, как это должно определить тупик, но это не означает, что необходимо всегда предпочитать насмешки. На самом деле я обычно предпочитаю тупики и использую насмешки когда необходимый".
Неважно, Статист против взаимодействия. Подумайте о ролях и отношениях. Если объект сотрудничает с соседом, чтобы выполнить свою работу, то эта связь (выраженная в интерфейсе) является кандидатом для тестирования с использованием имитаций. Если объект представляет собой простой объект-значение с небольшим поведением, проверьте его напрямую. Я не вижу смысла писать макеты (или даже заглушки) вручную. Вот так мы все начали и отошли от этого рефакторинга.
Для более подробного обсуждения рассмотрите возможность взглянуть на http://www.mockobjects.com/book