Какая лучшая макетная среда для Java?
Какой лучший фреймворк для создания фиктивных 9X_jre объектов в Java? Почему? Каковы плюсы и 9X_mocking минусы каждого фреймворка?
Ответ #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 статические методы.
- Я испытал 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 и конструкторы.
Ответ #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 актуальной, насколько это возможно.
- Я впечатлен 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.
- Просто обновление: проект 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
.
Ответ #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 или не поддерживают тесты.
- +1 Этот ответ требует больше голосов. Следует рассказать, что им на самом деле понравилось, а что нет в фреймворке. Просто "Я использо ...
Ответ #7
Ответ на вопрос: Какая лучшая макетная среда для Java?
Мы активно используем EasyMock и EasyMock Class 9X_unittest Extension на работе и очень довольны этим. Это 9X_mocking-framework в основном дает вам все, что вам нужно. Взгляните 9X_mocks на документацию, там есть очень хороший 9X_openjdk пример, который показывает вам все возможности 9X_core-java EasyMock.
- В своем вопросе я больше искал, что вам нравится и не нравится в фиктивной структуре. Я могу найти документацию ...
Ответ #8
Ответ на вопрос: Какая лучшая макетная среда для Java?
Я рано использовал JMock. Я пробовал Mockito 9X_mocks на своем последнем проекте, и он мне понравился. Лаконичнее, чище. PowerMock 9X_javax покрывает все потребности, которые отсутствуют 9X_java-libraries в Mockito, такие как имитация статического 9X_java-libraries кода, имитация создания экземпляра, имитация 9X_mock финальных классов и методов. Так что у меня 9X_oraclejdk есть все необходимое для работы.
Ответ #9
Ответ на вопрос: Какая лучшая макетная среда для Java?
Мне нравится JMock, потому что вы можете 9X_java-libraries устанавливать ожидания. Это полностью отличается 9X_unit-testing от проверки того, был ли вызван метод, найденный 9X_j2se в некоторых фиктивных библиотеках. Используя 9X_.java JMock, вы можете написать очень сложные 9X_.java ожидания. См. Jmock cheat-sheat.
Ответ #10
Ответ на вопрос: Какая лучшая макетная среда для Java?
Да, Mockito — отличный фреймворк. Я использую 9X_java его вместе с hamcrest и Google guice для настройки тестов.
Ответ #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.
Ответ #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.
Ответ #13
Ответ на вопрос: Какая лучшая макетная среда для Java?
Для чего-то немного другого вы можете использовать 9X_jdk JRuby и Mocha, которые объединены в JtestR, чтобы написать 9X_unit-tests тесты для вашего кода Java на выразительном 9X_.java и кратком Ruby. Есть несколько полезных 9X_mocks примеров насмешек с JtestR here. Одним из преимуществ 9X_mocks этого подхода является то, что имитировать 9X_mock конкретные классы очень просто.
Ответ #14
Ответ на вопрос: Какая лучшая макетная среда для Java?
Я начал использовать макеты через JMock, но 9X_oraclejdk в итоге перешел на EasyMock. EasyMock был 9X_core-java именно таким — проще — и предоставлял синтаксис, который 9X_unit-testing казался более естественным. С тех пор я 9X_jdk не переключался.
-
8
-
2
-
6
-
11
-
11
-
6
-
4
-
5
-
10
-
3
-
2
-
7
-
4
-
5
-
2
-
7
-
3
-
4
-
6
-
4
-
5
-
7
-
5
-
3
-
4
-
4
-
3
-
3
-
3
-
1
-
1
-
13
-
3
-
3
-
3
-
14
-
2
-
5
-
4
-
5
-
2
-
2
-
9
-
1
-
12
-
3
-
4
-
3
-
3
-
2