Какой лучший макет рамки для Java?

голоса
347

Что наилучшая основа для создания фиктивных объектов в Java? Зачем? Каковы плюсы и минусы каждого из рамок?

Задан 22/08/2008 в 16:45
источник пользователем
На других языках...                            


14 ответов

голоса
315

Я имел хороший успех , используя Mockito .

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

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

Вот (сокращенный) пример с домашней страницы Mockito:

import static org.mockito.Mockito.*;

List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();

Он не становится намного проще, чем это.

Единственный Основной недостаток я могу думать о том, что он не будет издеваться статические методами.

Ответил 22/08/2008 в 19:02
источник пользователем

голоса
84

Я создатель PowerMock так очевидно, что я должен рекомендовать! :-)

PowerMock распространяется как EasyMock и Mockito с возможностью издеваться статические методы , окончательный и даже частные методы. Поддержка EasyMock завершена, но плагин Mockito нужно немного больше работы. Мы планируем добавить поддержку JMock , а также.

PowerMock не предназначен для замены других структур, а он может быть использован в сложных ситуациях , когда другие механизмы does't позволяют насмешливый. PowerMock также содержит другие полезные функции , такие как подавление статических инициализаторов и конструкторов.

Ответил 28/01/2009 в 20:26
источник пользователем

голоса
46

Сайт проекта JMockit содержит большое количество сравнительных данных для текущих инструментарии Mocking.

В частности, проверить матрицу сравнения особенность , которая охватывает EasyMock, JMock, Mockito, Unitils Mock, PowerMock, и, конечно , JMockit. Я стараюсь держать его точной и актуальной, насколько это возможно.

Ответил 21/06/2009 в 23:18
источник пользователем

голоса
21

Я с успехом с JMockit .

Это довольно новый, и поэтому это немного сырой и под документированы. Он использует ASM динамически переопределять класс байткод, так что он может издеваться все методы , включая статические, частные, конструктор и статические инициализатор. Например:

import mockit.Mockit;

...
Mockit.redefineMethods(MyClassWithStaticInit.class,
                       MyReplacementClass.class);
...
class MyReplacementClass {
  public void $init() {...} // replace default constructor
  public static void $clinit{...} // replace static initializer
  public static void myStatic{...} // replace static method
  // etc...
}

Он имеет интерфейс, позволяющий Ожидания сценариев записи / воспроизведения, а также:

import mockit.Expectations;
import org.testng.annotations.Test;

public class ExpecationsTest {
  private MyClass obj;

  @Test
  public void testFoo() {
    new Expectations(true) {
      MyClass c;
      {
        obj = c;
        invokeReturning(c.getFoo("foo", false), "bas");
      }
    };

    assert "bas".equals(obj.getFoo("foo", false));

    Expectations.assertSatisfied();
  }

  public static class MyClass {
    public String getFoo(String str, boolean bool) {
      if (bool) {
        return "foo";
      } else {
        return "bar";
      }
    }
  }
}

Недостатком является то, что она требует Java 5/6.

Ответил 18/09/2008 в 16:38
источник пользователем

голоса
15

Кроме того, можно посмотреть на тестирование с помощью Groovy. В Groovy можно легко издеваться Java интерфейсы, используя «как» оператора:

def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest 

Помимо этой основной функциональности Groovy предлагает намного больше на насмешливый фронте, в том числе мощный MockForи StubForклассов.

http://docs.codehaus.org/display/GROOVY/Groovy+Mocks

Ответил 18/09/2008 в 15:24
источник пользователем

голоса
13

Я начал использовать издевается с EasyMock . Достаточно легко понять, но шаг переигровка был своего рода раздражает.Mockito удаляет это, а также имеет более чистый синтаксис , как это выглядит , как читаемость была одна из его главных целей. Я не могу не подчеркнуть , насколько это важно, так как большинство разработчиков будет тратить свое время на чтение и сохранение существующего кода, не создавая его.

Еще одна приятная вещь в том, что интерфейсы и классы реализации обрабатываются таким же образом, в отличие от EasyMock, где еще вы должны помнить (и проверить), чтобы использовать расширение EasyMock класса.

Я взял быстрый взгляд на JMockit в последнее время , и в то время как список прачечных особенностей является довольно всеобъемлющим, я думаю , что цена это разборчивость в результате кода, и , чтобы писать больше.

Для меня, Mockito поражает сладкое пятно, будучи легко писать и читать, и дело с большинством ситуаций , большая часть кода потребует. Использование Mockito с PowerMock бы мой выбор.

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

Ответил 18/06/2011 в 04:11
источник пользователем

голоса
11

Мы сильно используя EasyMock и расширение EasyMock класса на работе и очень счастлива с ним. Это в основном дает вам все , что вам нужно. Посмотрите на документации, есть очень хороший пример , который показывает вам все возможности EasyMock.

Ответил 22/08/2008 в 20:42
источник пользователем

голоса
8

Я использовал JMock рано. Я попытался Mockito в моем последнем проекте и понравился. Более краткие, более чище. PowerMock охватывает все потребности, которые отсутствуют в Mockito, такие как насмешливый статический код, издеваясь над собой создание экземпляра, насмешливый конечные классы и методы. Так что у меня есть все, что нужно выполнять свою работу.

Ответил 09/01/2010 в 08:50
источник пользователем

голоса
6

Мне нравится JMock , потому что вы можете настроить ожидания. Это полностью отличается от проверки , если метод был вызван найдены в некоторых фиктивных библиотеках. Использование JMock вы можете написать очень сложные ожидания. Смотрите JMock чит-сома .

Ответил 20/12/2008 в 01:53
источник пользователем

голоса
5

Да, Mockito является большой рамкой. Я использую его вместе с Hamcrest и Google Guice для установки моих тестов.

Ответил 31/08/2008 в 19:52
источник пользователем

голоса
4

Лучшее решение для насмешки, чтобы иметь машину делать всю работу с автоматизированной спецификацией на основе тестирования. Для Java см ScalaCheck и Reductio рамки включены в Functional Java библиотеки. С автоматизированными спецификациями на основе каркасов для тестирования, вы передаете спецификации методы при испытании (свойство об этом , что должно быть правдой) , и структура генерирует тесты, а также фиктивные объекты автоматически.

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

val propSqrt = forAll { (n: Int) => (n >= 0) ==> scala.Math.sqrt(n*n) == n }

Когда вы звоните propSqrt.check(), ScalaCheck генерирует сотни целых чисел и проверяет свойство для каждого, а также автоматически убедившись , что крайние случаи покрыты хорошо.

Несмотря на то, ScalaCheck написано в Scala, и требует Scala компилятора, это легко проверить Java-код с ним. Рамки Reductio в Functional Java является чисто реализация Java из одних и тех же понятий.

Ответил 28/01/2009 в 21:01
источник пользователем

голоса
3

Mockito также предоставляет возможность методов заглушек, соответствующие аргументы (как anyInt () и anyString ()), проверить количество вызовов (раз (3), atLeastOnce (), никогда ()), и многое другое .

Я также обнаружил , что Mockito является простым и чистым .

Одна вещь , которую я не люблю о Mockito, что вы не можете окурок статические методы .

Ответил 26/08/2008 в 14:24
источник пользователем

голоса
2

Для чего - то немного другое, вы можете использовать JRuby и мокко , которые объединены в JtestR писать тесты для кода Java в выразительном и емком Ruby. Есть некоторые полезные примеры насмешливо с JtestR здесь . Одним из преимуществ такого подхода заключается в том, что насмешливое конкретные классах очень просто.

Ответил 03/02/2009 в 19:44
источник пользователем

голоса
1

Я начал использовать издевается через JMock, но в конечном итоге перешли использовать EasyMock. EasyMock был только что, --easier-- и при условии, что синтаксис чувствовал себя более естественно. Я не переключился с тех пор.

Ответил 26/08/2008 в 12:35
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more