Содержание
- 2. Тестирование. Пакет JUnit Сегодня большую популярность приобретает test-driven development(TDD), техника разработки ПО, при которой сначала пишется
- 3. Самым известным фреймворком является JUnit. Используется он в двух вариантах JUnit 3 и JUnit 4 JUnit
- 4. Сами тесты состоят из выполнения некоторого кода и проверок. Проверки чаще всего выполняются с помощью класса
- 5. public int getVariable() { return variable; } public void setVariable (int variable){ this.variable = variable; }
- 6. Напишем для этого класса тесты, используя JUnit 3. Удобнее всего, писать тесты, рассматривая некий класс как
- 7. import junit.framework.*; public class TestClass extends TestCase { public TestClass(String testName) { super(testName); } public void
- 8. Метод assertTrue проверяет, является ли результат выражения верным. Некоторые другие методы, которые могут пригодиться - assertEquals,
- 9. import junit.framework.*; import junit.textui.*; public class Main{ public static void main(String[] args) { TestRunner runner =
- 10. На экране получим: Time: 0 Ok(3 tests) Для тестирования более комплексных классов, могут пригодится методы setUp
- 11. Наследуя тест-класс от ExceptionTestCase, можно проверить что-либо на выброс исключения. JUnit 4 Здесь была добавлена поддержка
- 12. Основные аннотации Аннотация @Before обозначает методы, которые будут вызваны до исполнения теста, методы должны быть public
- 13. Аннотация @After обозначает методы, которые будут вызваны после выполнения теста, методы должны быть public void. Здесь
- 14. Аннотация @Test обозначает тестовые методы. Как и ранее, эти методы должны быть public void. Здесь размещаются
- 15. Если какой-либо тест по какой-либо серьезной причине нужно отключить(например, этот тест постоянно валится, но его исправление
- 16. Рассмотрим пример: @RunWith(JUnit4.class) public class JUnit4Test extends Assert { private final Map toHexStringData = new HashMap
- 17. @After public void tearDownToHexStringData() { toHexStringData.clear(); } @Test public void testToHexString() { for (Map.Entry entry :
- 18. Для того, чтобы запустить данный тест в командной строке необходимо ввести >java -cp .;d:\distribs\java\junit-4.11.jar; d:\distribs\java\hamcrest-all-1.3.jar org.junit.runner.JUnitCore
- 19. Запуск теста. Запуск теста можно сконфигурировать с помощью @RunWith. При этом класс, указанный в аннотации должен
- 20. Categories — попытка организовать тесты в категории(группы). Для этого тестам задается категория с помощью @Category, затем
- 21. @RunWith(Categories.class) @Categories.IncludeCategory(JUnit4TestSuite.class) //настройка категории @Suite.SuiteClasses({ StringUtilsJUnit4CategoriesTest.class}) public class JUnit4TestSuite { } Рассмотрим пример использования категорий в
- 22. Первый класс с тестами @Category({IShow.class}) public class FooTest { JavaTests js; @Before public void initObject(){ js=new
- 23. Другой класс с тестами @Category({IShow.class}) public class FooTest1 { JavaTests js; @Category({IShow.class}) @Before public void initObject(){
- 24. Запускаемый класс @RunWith(Categories.class) @IncludeCategory(IShow.class) @SuiteClasses( {FooTest1.class, FooTest.class }) public class IShow { } После запуска java
- 25. Parameterized — позволяет писать параметризированные тесты. Для этого в тест-классе объявляется статический метод возвращающий список данных,
- 26. @Test public void testIsEmpty() { final boolean actual = StringUtils.isEmpty(testData); assertEquals(expected, actual); } @Parameterized.Parameters public static
- 27. Theories — чем-то схож с предыдущим, но параметризирует тестовый метод, а не конструктор. Данные помечаются с
- 28. @DataPoints public static Object[][] isEmptyData = new Object[][] { { "", true }, { " ",
- 29. Рассмотрим пример. Класс MathFunc оставим без изменений. Класс TestClass имеет вид import org.junit.runner.*; import org.junit.Assert; import
- 30. @DataPoints public static int[][] Data = new int[][] {{5, 120}}; @Theory public void testFactorialPositive(final int[] obj)
- 31. Запуск теста будет иметь вид: >java –cp .;junit-4.92b2.jar org.junit.runner.JUnitCore TestClass На экране Time: 0.015 OK(3 tests)
- 32. Пример использования @DataPoint Пусть имеется класс public class JavaTests { public int factorial(int n){ if(n==0) return
- 33. RunWith(Theories.class) public class FooTest { JavaTests js; @Before public void initObject(){ js=new JavaTests();} @DataPoint public static
- 34. Журналирование Log4j При небольшом приложении вполне хватет возможностей System.out.println(), но по мере увеличения и усложнения приложения
- 35. 2) запись логов в файл, БД и т.п. 3) вывод дополнительной информации о сообщении: время события,
- 36. import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; public class Test { private static Logger logger = Logger.getLogger(Test.class); public static
- 37. Для запуска данного приложения нужен пакет log4j-1.2.16.jar. На экране получим: 0 [main] INFO ru.vingrad.log.Test - Hello
- 38. Каждый логгер имеет уникальное имя, и вызов getLogger() с одним и тем же именем вернет один
- 39. Т.е. можно сконфигурировать только корневой логгер, а все логгеры будут использовать его настройки. Логгер может писать
- 40. Когда конфигурируется система логгирования то указывается сообщения какого уровня надо писать в лог. В лог будут
- 41. Следующая составляющая системы логгирования это - аппендер (org.apache.log4j.Appender). Аппендер - это класс который занимается непосредственно записью
- 42. Рассмотрим процесс записи логов: Вызываем logger.info("Hello world!") 2. Происходит проверка уровня логгирования для данного логгера, если
- 43. 3. Далее сообщение передается аппендерам установленным для данного логгера (если есть). 4. Если свойство additivity установлено
- 44. Рассмотрим конфигурацию логгеров. Для конфигурирования Log4j используются файлы конфигурации log4j.xml и log4j.properties. Далее рассмотрим конфигуратор log4j.xml
- 45. Добавим аппендеры. Консоль: class="org.apache.log4j.ConsoleAppender"> value="%d{ISO8601} [%5p] %m at %l%n"/>
- 46. CONSOLE-DEBUG имя аппендера, по этому имени он будет упоминаться в этом конфиге. org.apache.log4j.ConsoleAppender - имя класса
- 47. Аналогично конфигурируется аппендер для ошибок class="org.apache.log4j.ConsoleAppender"> value="%d{ISO8601} [%5p] %m at %l%n"/> class="org.apache.log4j.varia.LevelRangeFilter"> разница в том, ошибки
- 48. Конфигурируем запись в файл class="org.apache.log4j.FileAppender"> value="%d{ISO8601} [%5p] %c %m at %l%n"/> параметр file задает имя файла.
- 49. Теперь сконфигурируем логгеры. Предположим что используется Hibernate и необходимо видеть только сообщения об ошибках и писать
- 50. Но в то же самое время, необходимы отладочные сообщения в org.hibernate.SQL (где пишутся выполняемые Hibernate SQL
- 51. Для всех остальных категорий включаем уровень DEBUG и запись в консоль и файл
- 52. Протестировать данный xml файл можно следующим кодом: import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; public class Test { private
- 53. Содержимое файла app.log имеет вид: 2011-06-10 01:47:28,968 [DEBUG] Test Inside main() at Test.main(Test.java:9) 2011-06-10 01:47:28,968 [
- 54. Рассмотрим пример: import org.apache.log4j.Logger; import org.apache.log4j.FileAppender; import org.apache.log4j.SimpleLayout; import org.apache.log4j.Level; import java.io.IOException; public class DemoLog {
- 55. public static int factorial(int n) { if (n "argument " + n +" less then zero");
- 56. xmlns:log4j='http://jakarta.apache.org/log4j/'> class="org.apache.log4j.FileAppender">
- 58. Maven Жизненный цикл Maven имеет вид: validate — проверяет корректность метаинформации о проекте compile — компилирует
- 59. При этом все шаги последовательны. И если, к примеру, выполнить $ mvn package, то фактически будут
- 61. Плагины под Maven maven-archetype-plugin Плагин maven-archetype-plugin предназначен для того чтобы по существующему шаблону создавать новые проекты.
- 62. maven-compiler-plugin Компилятор - основной плагин который используется практически во всех проектах. Он доступен по умолчанию, но
- 63. maven-surefire-plugin - плагин для запуска тестов maven-surefire-plugin - плагин который запускает тесты и генерирует отчёты по
- 64. maven-javadoc-plugin Плагин maven-javadoc-plugin предназначен для того чтобы генерировать докуметацию по исходному коду проекта стандартной утилитой javadoc.
- 65. maven-checkstyle-plugin Плагин проверяет стиль и качество исходного кода. Из наиболее часто используемых и простых проверок: наличие
- 66. Подключить плагин можно следующим образом: org.apache.maven.plugins maven-checkstyle-plugin 2.7 ........... после этого можно запустить проверку кода: mvn
- 67. findbugs-maven-plugin findbugs-maven-plugin плагин для автоматического нахождения багов в проекте. Принцип действия плагина основан на поиске шаблонов
- 68. org.codehaus.mojo findbugs-maven-plugin 2.5.2 Enables analysis which takes more memory but finds more bugs. If you run
- 69. org.codehaus.mojo findbugs-maven-plugin 2.5.2 Enables analysis which takes more memory but finds more bugs. If you run
- 70. ${project.build.directory}/findbugs Ensures that FindBugs inspects source code when project is compiled. --> analyze-compile compile check
- 71. Создание проекта в Maven mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app Для создания,например web-приложения mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp
- 72. junit junit 3.8.1 test
- 73. webapps org.apache.tomcat.maven tomcat7-maven-plugin 2.2 apache-tomcat http://localhost:8080/manager/text /mywebapp
- 74. Файл settings.xml имеет вид: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> id это просто идентификатор. --> apache-tomcat-6.0.32 tomcat tomcat
- 75. Файл tomcat-user.xml manager-script,manager-gui,admin-gui"/>
- 76. Java Native Interface Java Native Interface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной
- 77. Рассмотрим пример использования JNI. Имеется следующий Java проект package javaapplication114; public class TestNativeClass { private static
- 78. Свяжем native метод в классе TestNativeClass с методом описанным в javadll.dll. Для этого после компиляции класса
- 79. Описываем реализацию метода JNIEXPORT jint JNICALL Java_javaapplication114_TestNativeClass_sum(JNIEnv *, jobject, jint, jint); Имеем: JNIEXPORT jint JNICALL Java_javaapplication114_TestNativeClass_sum(JNIEnv
- 81. Скачать презентацию