Какая лучшая макетная среда для Java?

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

347
0
14
Общее количество ответов: 14

Ответ #1

Ответ на вопрос: Какая лучшая макетная среда для Java?

Я успешно использовал Mockito.

Когда я попытался 9X_openjdk изучить JMock и EasyMock, я обнаружил, что 9X_mock кривая обучения немного крутая (хотя, возможно, это 9X_core-java только я).

Мне нравится Mockito из-за его 9X_unit-testing простого и понятного синтаксиса, который 9X_unit-tests я смог понять довольно быстро. Минимальный 9X_javax синтаксис предназначен для очень хорошей 9X_j2se поддержки распространенных случаев, хотя 9X_unit-testing несколько раз, когда мне нужно было сделать 9X_jre что-то более сложное, я обнаруживал, что 9X_java то, что я хотел, поддерживалось и было легко 9X_openjdk понять.

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

import static org.mockito.Mockito.*;

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

Нет ничего проще.

Единственный 9X_j2se существенный недостаток, о котором я могу 9X_oraclejdk думать, это то, что он не будет имитировать 9X_java-libraries статические методы.

315
8

  • Я испытал EasyMock и считаю его довольно простым в использовании ... так что, если mockito проще, я думаю, это ДЕЙСТВИТЕЛЬН ...

Ответ #2

Ответ на вопрос: Какая лучшая макетная среда для Java?

Я создатель PowerMock, поэтому, безусловно, должен 9X_mocks рекомендовать его! :-)

PowerMock расширяет возможности 9X_.java EasyMock и Mockito с помощью mock static methods, final и даже 9X_unit-test частных методов. Поддержка EasyMock завершена, но 9X_java-libraries над плагином Mockito нужно доработать. Мы 9X_j2se также планируем добавить поддержку JMock.

PowerMock 9X_jre не предназначен для замены других фреймворков, скорее 9X_java его можно использовать в сложных ситуациях, когда 9X_javax другие фреймворки не позволяют имитировать. PowerMock 9X_unit-testing также содержит другие полезные функции, такие 9X_java как suppressing static initializers и конструкторы.

84
0

Ответ #3

Ответ на вопрос: Какая лучшая макетная среда для Java?

JMockit project site содержит много сравнительной информации 9X_oraclejdk о текущих наборах инструментов для имитации.

В 9X_openjdk частности, обратите внимание на feature comparison matrix, который 9X_unittest охватывает EasyMock, jMock, Mockito, Unitils 9X_j2se Mock, PowerMock и, конечно же, JMockit. Я 9X_java-libraries стараюсь, чтобы информация была точной и 9X_unit-test актуальной, насколько это возможно.

46
1

  • Я впечатлен JMockit, у него более крутая кривая обучения, но у него много лет очень х ...

Ответ #4

Ответ на вопрос: Какая лучшая макетная среда для Java?

У меня были успехи с JMockit.

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

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...
}

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

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";
      }
    }
  }
}

Минус 9X_unit-test в том, что требуется Java 5/6.

21
1

  • Просто обновление: проект JMockit перемещен на htt ...

Ответ #5

Ответ на вопрос: Какая лучшая макетная среда для Java?

Вы также можете взглянуть на тестирование 9X_mock с помощью Groovy. В Groovy вы можете легко 9X_javax имитировать интерфейсы Java, используя оператор 9X_oraclejdk as:

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

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

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

15
0

Ответ #6

Ответ на вопрос: Какая лучшая макетная среда для Java?

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

Еще 9X_jre одна приятная вещь заключается в том, что 9X_java-se интерфейсы и классы реализации обрабатываются 9X_mocks одинаково, в отличие от EasyMock, где вам 9X_javax все еще нужно помнить (и проверять), чтобы 9X_unit-tests использовать расширение класса EasyMock.

Недавно 9X_oraclejdk я бегло просмотрел JMockit, и, хотя подробный список 9X_.java функций довольно обширен, я думаю, что цена 9X_unittest этого - удобочитаемость результирующего 9X_java-libraries кода и необходимость писать больше.

Для меня 9X_oraclejdk Mockito - это золотая середина: его легко 9X_j2se писать и читать, и он справляется с большинством 9X_j2se ситуаций, которые потребуются большинству 9X_mocking-framework кода. Я бы предпочел использовать Mockito с PowerMock.

Следует 9X_.java учитывать, что инструмент, который вы выбрали 9X_jdk бы, если бы вы разрабатывали самостоятельно 9X_java-se или в небольшой сплоченной команде, может 9X_jdk оказаться не лучшим вариантом для большой 9X_unit-testing компании с разработчиками разного уровня 9X_openjdk квалификации. В последнем случае потребуется 9X_unit-tests больше внимания уделять удобочитаемости, простоте 9X_mock использования и простоте. Нет смысла получать 9X_mocking-framework идеальный фреймворк для имитации, если многие 9X_unit-test люди в конечном итоге не используют его 9X_java-libraries или не поддерживают тесты.

13
1

  • +1 Этот ответ требует больше голосов. Следует рассказать, что им на самом деле понравилось, а что нет в фреймворке. Просто "Я использо ...

Ответ #7

Ответ на вопрос: Какая лучшая макетная среда для Java?

Мы активно используем EasyMock и EasyMock Class 9X_unittest Extension на работе и очень довольны этим. Это 9X_mocking-framework в основном дает вам все, что вам нужно. Взгляните 9X_mocks на документацию, там есть очень хороший 9X_openjdk пример, который показывает вам все возможности 9X_core-java EasyMock.

11
1

  • В своем вопросе я больше искал, что вам нравится и не нравится в фиктивной структуре. Я могу найти документацию ...

Ответ #8

Ответ на вопрос: Какая лучшая макетная среда для Java?

Я рано использовал JMock. Я пробовал Mockito 9X_mocks на своем последнем проекте, и он мне понравился. Лаконичнее, чище. PowerMock 9X_javax покрывает все потребности, которые отсутствуют 9X_java-libraries в Mockito, такие как имитация статического 9X_java-libraries кода, имитация создания экземпляра, имитация 9X_mock финальных классов и методов. Так что у меня 9X_oraclejdk есть все необходимое для работы.

8
0

Ответ #9

Ответ на вопрос: Какая лучшая макетная среда для Java?

Мне нравится JMock, потому что вы можете 9X_java-libraries устанавливать ожидания. Это полностью отличается 9X_unit-testing от проверки того, был ли вызван метод, найденный 9X_j2se в некоторых фиктивных библиотеках. Используя 9X_.java JMock, вы можете написать очень сложные 9X_.java ожидания. См. Jmock cheat-sheat.

6
0

Ответ #10

Ответ на вопрос: Какая лучшая макетная среда для Java?

Да, Mockito — отличный фреймворк. Я использую 9X_java его вместе с hamcrest и Google guice для настройки тестов.

5
0

Ответ #11

Ответ на вопрос: Какая лучшая макетная среда для Java?

Лучшее решение проблемы имитации - это сделать 9X_java-se так, чтобы машина выполняла всю работу с 9X_j2se помощью автоматизированного тестирования 9X_unit-tests на основе спецификаций. Для Java см. ScalaCheck и 9X_mocking структуру Reductio, включенную в библиотеку Functional Java. С 9X_openjdk помощью автоматизированных платформ тестирования 9X_mock на основе спецификаций вы предоставляете 9X_unittest спецификацию тестируемого метода (свойство, которое 9X_unit-test должно быть истинным), и среда автоматически 9X_jre генерирует тесты, а также имитирующие объекты.

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

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

Когда 9X_unit-testing вы вызываете propSqrt.check(), ScalaCheck генерирует сотни 9X_jdk целых чисел и проверяет ваше свойство для 9X_mocks каждого, а также автоматически проверяет, хорошо 9X_unit-test ли покрыты крайние случаи.

Несмотря на то, что 9X_java-libraries ScalaCheck написан на Scala и требует компилятора 9X_javax Scala, с его помощью легко протестировать 9X_unit-tests код Java. Фреймворк Reductio в функциональной 9X_java-se Java - это чистая реализация тех же концепций 9X_openjdk на Java.

4
0

Ответ #12

Ответ на вопрос: Какая лучшая макетная среда для Java?

Mockito также предоставляет возможность 9X_java-libraries заглушки методов, сопоставления аргументов 9X_jre (например, anyInt() и anyString()), проверки 9X_java-libraries количества вызовов (times(3), atLeastOnce(), never()), and more.

Я 9X_oraclejdk также обнаружил, что Мокито — это simple and clean.

Что мне 9X_jre не нравится в Mockito, так это то, что вы 9X_java-se can't stub static methods.

3
0

Ответ #13

Ответ на вопрос: Какая лучшая макетная среда для Java?

Для чего-то немного другого вы можете использовать 9X_jdk JRuby и Mocha, которые объединены в JtestR, чтобы написать 9X_unit-tests тесты для вашего кода Java на выразительном 9X_.java и кратком Ruby. Есть несколько полезных 9X_mocks примеров насмешек с JtestR here. Одним из преимуществ 9X_mocks этого подхода является то, что имитировать 9X_mock конкретные классы очень просто.

2
0

Ответ #14

Ответ на вопрос: Какая лучшая макетная среда для Java?

Я начал использовать макеты через JMock, но 9X_oraclejdk в итоге перешел на EasyMock. EasyMock был 9X_core-java именно таким — проще — и предоставлял синтаксис, который 9X_unit-testing казался более естественным. С тех пор я 9X_jdk не переключался.

1
0