9
Javenue Блог о программировании на Java Информационные технологии 2 January 2006 Тестирование с помощью JUnit (Test Case) Posted in: Java open-source проекты , Тестирование кода , Java technologies, J2SE | English version of this article you can find here . Тестирование далеко не всегда бывает веселым и интересным. Этот процесс обычно достаточно продолжителен и полон монотонной работы. Боль?инство программистов пользуются стандартным выводом или же дебаггером для тестирования их классов. В этой статье я опи?у библиотеку JUnit, которая упрощает и во многом автоматизирует процесс написания тестов. Для демонстрации основных возможностей JUnit Framework, напи?ем примитивный класс на языке Java и будем над ним издеваться. Этот класс будет иметь два метода - нахождение факториала и суммы двух чисел: public class MathFunc { private int variable; public MathFunc() { variable = 0; } public MathFunc(int var) { variable = var; } public int getVariable() { return variable; } public void setVariable(int variable) { this.variable = variable; } public long factorial() { long result = 1; if (variable > 1) { for (int i=1; i<=variable; i++) result = result*i; } return result; } public long plus(int var) { long result = variable + var; return result;

Тестирование с помощью JUnit (Test Case)

  • Upload
    -

  • View
    342

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Тестирование с помощью JUnit (Test Case)

Javenue

Блог о программировании на JavaИнформационные технологии

2 January

2006

Тестирование с помощью JUnit (Test Case)

Posted in: Java open-source проекты, Тестирование кода, Java technologies, J2SE |

English version of this article you can find here.

Тестирование далеко не всегда бывает веселым и интересным. Этот процесс обычно

достаточно продолжителен и полон монотонной работы. Боль�?инство программистовпользуются стандартным выводом или же дебаггером для тестирования их классов.

В этой статье я опи�?у библиотеку JUnit, которая упрощает и во многом автоматизирует

процесс написания тестов.

Для демонстрации основных возможностей JUnit Framework, напи�?ем примитивный класс наязыке Java и будем над ним издеваться. Этот класс будет иметь два метода - нахождение

факториала и суммы двух чисел:

public class MathFunc { private int variable;

public MathFunc() { variable = 0; } public MathFunc(int var) { variable = var; }

public int getVariable() { return variable; } public void setVariable(int variable) { this.variable = variable; }

public long factorial() { long result = 1; if (variable > 1) { for (int i=1; i<=variable; i++) result = result*i; } return result; }

public long plus(int var) { long result = variable + var; return result;

Page 2: Тестирование с помощью JUnit (Test Case)

}}

Для написания тестового класса нам нужно создать наследника junit.framework.TestCase. Затем

необходимо определить конструктор, принимающий в качестве параметра строку (String) и

передающую ее родительскому классу. Наконец, напи�?ем столько тестовых методов, сколько

захотим:

public class TestClass extends TestCase { public TestClass(String testName) { super(testName); }

public void testFactorialNull() { MathFunc math = new MathFunc(); assertTrue(math.factorial() == 1); }

public void testFactorialPositive() { MathFunc math = new MathFunc(5); assertTrue(math.factorial() == 120); }

public void testPlus() { MathFunc math = new MathFunc(45); assertTrue(math.plus(123) == 168); }}

Метод assertTrue проверяет, является ли результат выражения верным. Некоторые другиеметоды, которые могут пригодиться - assertEquals, assertFalse, assertNull, assertNotNull, assertSame.

Для того, чтобы объединить тесты, можно воспользоваться классом TestSuite с его методомaddTest. Наконец, для запуска всех тестов нужно воспользоваться TestRunner. Обычно яиспользую текстовый junit.textui.TestRunner (есть также графические версии -

junit.swingui.TestRunner, junit.awtui.TestRunner). В итоге мы получаем метод main следующего вида:

public static void main(String[] args) { TestRunner runner = new TestRunner(); TestSuite suite = new TestSuite(); suite.addTest(new TestClass(“testFactorialNull”)); suite.addTest(new TestClass(“testFactorialPositive”)); suite.addTest(new TestClass(“testPlus”)); runner.doRun(suite);}

После запуска получим такие данные:

Time: 0,02OK (3 tests)

Для тестирования более комплексных классов, могут пригодится методы setUp и tearDown.Первый метод может проинициализировать один или несколько экземпляров тестируемого

класса для использования в нескольких TestCases, второй метод отпускает захваченные приинициализации ресурсы.

Тестирование с помощью JUnit становится все более популярным. Думаю, JUnit Framework вомногом поможет вам.

Page 3: Тестирование с помощью JUnit (Test Case)

Комментарии по поводу статьи приветствуются.

24 Comments »

RSS feed for comments on this post. TrackBack URI

Vitali KFebruary 24, 2006 #

Рулез!

�? еще - я наконец понял зачем нужны assert’ы

Огромное спасибо за статьи и за сайт вцелом.

Здесь как нигде явно подтверждается выражение “краткость - сестра таланта”

Удачи Вам (и всем нам) в ва�?ем и на�?ем нелёгком труде!

hudsonSeptember 3, 2006 #

Спасибо за статью! Помогла разобраться в самых азах jUnit. Буду пробовать применять junit

framework при тестировании web приложений вместе с selenium. Если интересно что получится- пи�?ите

Bishop

September 21, 2006 #

Good article. But I’d like to get more information about such methods as: setUp() and tearDown() inexamples.Tnx

hudsonNovember 7, 2006 #

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

полученный мной jar файл. При этом из IDE прекрасно работают.

Как перебороть это недоразумение? Буду рад совету на dmitry(dot)bykadorov(at)gmail.com

НЕТ Адепт

November 26, 2006 #

Я типа НЕТ-чик. Умею пользоваться NUnit. Вот ре�?ил почитать, а как живут Жабисты…�?заметил, что живут) У нас все можно задать через Аттрибуты ( Анатации по ва�?енски)

Примерно вот так

МойЛюбойКласс{

[Test]

КакХочуТак�?Называю()

Page 4: Тестирование с помощью JUnit (Test Case)

{

Assert(myClass.Mul(2,2),4);

}}

Собственно и все:) А у вас такое планируется - на антотациях JUNIT?

DiVor

December 5, 2006 #

да, уже сделали (junit 4.0 + idea 6.x)

Denis

March 2, 2007 #

Спасибо за статью - классно написана,с помощью неё за 10 минут разобрался с JUnit.По ходу

дела наткнулся на след траблы :

1) Можно обойтись без мейна и рунераpublic static Test suite() {

TestSuite suite = new TestSuite();

suite.addTest(new TestClass(“testFactorialNull”));

suite.addTest(new TestClass(“testFactorialPositive”));suite.addTest(new TestClass(“testPlus”));

return suite;

}

2) Все методы в TestClass должны начинаться со слова test,а иначе средства JUnit могут нераспознать метод как тест(то есть о�?ибка визуально будет определяться как о�?ибка в

программе которая тестирует,а не в той которую тестируют)

PVoLan

March 4, 2007 #

Хоть кто-то описал функцию main при работе с JUnit!

c0nst

March 4, 2007 #

2PVoLan: спасибо, старался. Просто из под IDE процесс запуска тестов очень упрощен и я не

хотел обращать на это внимание.

2Denis: на счет второго пункта: начиная с Java 1.5 можно использовать аннотации. Библиотеку

JUnit уже переписали под 1.5 и там можно называть тест как угодно, главное в аннотациинаписать, что это за метод. К сожалению, на проекте у нас все еще 1.4.2 используется. Но, скоро

буду перебираться на версии повы�?е…

slavik112211August 6, 2008 #

люди гляньте ещё вот сюда:

http://www.linux.ie/articles/tutorials/junit.phpну как же клёво там расписан процесс выявления о�?ибок в программе! я прям зафанател

тестами:)

Page 5: Тестирование с помощью JUnit (Test Case)

ПетрAugust 14, 2008 #

Спасибо, то что надо! Как раз для начинающих! Просто, коротко и понятно!

Agent

September 10, 2008 #

Всем привет!Я только начинаю разбираться с тестированием при помощи JUnit. Если кто может то покажите

пожалуйста как ре�?ить следующую задачу:

Дано:

�?нтерфейсpublic interface Triangle

{

int getLen1();int getLen2();

int getLen3();

}

Методы возвращают 3 числа, которые должны быть длинами сторон треугольника.

Есть метод возвращающий треугольник:

public final class TriangleProvider

{

public static Triangle getTriangle()

{

}

}

Требуется: написать код junit теста, проверяющего метод getTriangle на то, что он действительно

возвращает треугольник.

Заранее спасибо за ответы!

STARfishSeptember 11, 2008 #

2 Agent.

ре�?или в Яndex устроиться?:))))…

Mihey

June 11, 2009 #

Спасибо за помощь

Giraffe

Page 6: Тестирование с помощью JUnit (Test Case)

December 2, 2009 #

Вопрос тот же, что и у hudson.

Как запустить JUnit тесты не из-под IDE?

hudson

December 27, 2009 #

Giraffe, честно говоря давно это было. �? скорее всего дело было в CLASSPATH… )) Потому

что тесты из командной строки я запускал.

Don

March 19, 2010 #

А как тестировать методы, которые ничего не возвращают?

c0nst

March 19, 2010 #

@Don:

Даже если метод ничего не возвращает, он все же меняет состояние каких-то объектов (еслинет, то в по поводу необходимости такого метода есть боль�?ие сомнения).

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

Don

March 19, 2010 #

Так как тут описано, получается, работает. Но я читал, что такой способ устарел, т.е. нужно

применять аннотации. Свой класс не должен наследоваться от CaseTest, а над тестирующемметодом пи�?ется @Test, так ничего не получается, все равно нужно наследовать свой класс

от TestCase.

Есть примерчик, где описывается написание тестов от JUnit4?

GX3P

July 19, 2010 #

Здравствуйте,

Разъясните, пожалуйста, ситуацию. В чем смысл JUnit? Например, строки

MathFunc math = new MathFunc(45);

assertTrue(math.plus(123) == 168);

не являются ли они надуманными, в плане проверки? Ведь при отладке метода мы все равно

проверяем правильность его работы. Так в чем тогда смысл этих строк? Создается впечатление

искусственности ситуации.Действительно хочу понять.

Заранее спасибо,

Taper

August 27, 2010 #

To GX3P:

Page 7: Тестирование с помощью JUnit (Test Case)

Все тесты в итоге являются надуманными, бездумные тесты никому не нужны и что они будут

тестировать - большой вопрос…

На этом простом примере автор показал принцип использования JUnit с использованием

простых операций, которые можем проверить самостоятельно: 45 + 123 = 168.

Отладка: бывает разная, все зависит от приложения - есть случаи когда без ручной отладки не

обойтись никак (для этого собирают команды тестировщиков), а есть случаи, когда простыевещи можно проверить еще на этапе сборки приложения - для этого и создаются JUnit-тесты.

Ведь согласитесь, гораздо приятнее когда работу человека выполняет железяка, да еще и

быстро, и к тому же на этапе компиляции.

В данном примере использован всего один класс, а в реальности их может быть гораздо больше

(и зависимостей между ними тоже), а значит и вероятность возникновения ошибки

возрастает…

Очень редко случается что класс пишется один раз и навсегда, SDK и тот обновляется

периодически. Вот отсюда и появляется необходимость в автоматических тестах.

mike

March 20, 2011 #

to hudson

тоже столкнулся с такой проблемой при выполнении jar.

решение простое - надо скопировать junit****.jar в

java/lib/ext

и всё заработает.

Вызвано тем, что при выполнении *.class все библиотеки беруться из CLASSPATH.А вот привыполнении jar библиотеки берутся из class-path манифеста.

родробности тут

http://download.oracle.com/javase/1.4.2/docs/tooldocs/findingclasses.html

SunHere

August 15, 2011 #

Здравствуйте, далёк от программирования, но читаю про тестирование, выходит unitтестированием занимаются программисты в процессе написания кода?тоесть для

определённого класса пишеться класс, в котором тестяться данные?

chinaexp

August 16, 2011 #

http://chinaexp.ru интернет-магазин!

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em>

<i> <strike> <strong> <pre>

Page 8: Тестирование с помощью JUnit (Test Case)

Name *

Mail (will not be published) *

Website

Submit Comment

Blog

English

Archives

About

Search

Web javenue.info

Поиск в Google

Categories

Java GUI, Swing, AWT, SWT

Java open-source проектыJava technologies (translated)

Java technologies, J2SE

Java Web Design, J2EE

Project Management

Тестирование кода

Технологии XML, XPath

Полезные программыПаттерны проектирования

Базы данных, SQL, Oracle

Ваш досуг. Полезные советы

Интернет Маркетинг, SEO

Разное (uncategorized)

Page 9: Тестирование с помощью JUnit (Test Case)

Powered by WordPress, Design by Aph1na

RSS: Posts, Comments

СертификатJava - Эксперт

www.quizful.net