Junit - это структура регрессионного тестирования, написанная Эрихом Гаммой и Кентом Бек. Тест Junit - это тест на программист, то есть тест белой коробки. Домашняя страница проекта: http://www.junit.org/
При использовании JUNIT вы в основном пишете тестовые примеры, наследуя категорию TestCase, и используете имя TestXXX () для записи модульных тестов.
Есть три вещи, которые действительно должны писать тесты с JUNIT:
1. Импортный заявление представляет все классы в рамках JUNIT.FrameWork.*.
2. Оператор Extends позволяет вашему классу унаследовать от TestCase.
3. Конструктор, который вызывает супер (строка).
Функциональный MathTool
пакет com.zj.c01; открытый класс Mathtool {public static int gcd (int num1, int num2) {int r = 0; while (num2! = 0) {r = num1 % num2; num1 = num2; num2 = r; } вернуть num1; }}Тестовый класс MathTooltest
пакет com.zj.c01; import junit.framework.testcase; открытый класс mathtooltest extends testcase {public mathtooltest (string name) {super (name); } public void testGcd () {assertequals (5, mathtool.gcd (10, 5)); }} Когда мы используем Junit для проверки исключений, самый простой способ придумать - использовать Try ... поймать, чтобы поймать исключение. Нам нужно утверждать следующие условия:
1. Исключение, которое действительно брошено на 2. Тип класса исключения. Как правило, проверьте определение строки, содержащейся в атрибуте сообщения исключения. Итак, вы можете написать общий код таким:
@Test public void testbizexception () {try {password.validate ("123"); FAIL («Не брошено исключением»); } catch (Exception ex) {asserttrue (ex exantemof bizexception); AssertTrue (ex.getMessage (). Содержит ("ошибка")); }} Протестированный здесь метод заключается в том, бросает ли метод Password.validate () соответствующее исключение. Обратите внимание, что Fail («Не брошено на исключение».) В попытке здесь не пропущено.
Строка кода, в противном случае, если тестируемый метод не бросает исключение, этот вариант использования пройдет, и вы ожидаете, что вы должны сделать исключение.
В Junit 4 нет необходимости проверять подобные исключения метода. Хотя это также может определить, выполняется ли ожидаемое исключение, оно все еще имеет недостатки. Вы узнаете после сравнения. Junit не может показать вам подробную причину сбоя утверждения в методе Try ... Catch.
Итак, давайте посмотрим на то, как проверить исключения с 4 Junit? Просто используйте @test (excpted = exception.class) аннотация, см. Следующий код:
@Test (weder = bizexception.class) public void testbizexception () {password.validate (null); }
Если тестируемый метод имеет тип Bizexception, утверждение успешно. Кстати, @test (weder = bizexception.class) может только определять тип исключения, и нет соответствующей аннотации, чтобы утверждать более конкретную информацию об исключении, то есть оно не может определить атрибут сообщения исключения брошенного.
Тогда иногда мы добавим исключение из одного типа несколько раз в методе, но причины разные, то есть информация об сообщении исключения отличается. Например, когда произойдет Bizexception, будут следующие два исключения:
Новое Bizexception («Пароль должен содержать не менее 6 букв».) Новое Bizexception («Длина пароля менее 15 букв»)
Это требует способ утверждать сообщение об исключении. По этой причине, со времен Junit 4.7, мы дали более идеальный выбор, который является следующим кодом:
@Rule public wederexception wedersex = wederexception.none (); @Test public void testbizexception () бросает InvalidPasswordException {wederex.expect (bizexception.class); wederex.expectmessage («требуется»); Password.validate (""); } Приведенный выше код должен быть сосредоточен на:
1.
2. В @Test он не может быть записан как @Test (weder = bizexception.class), в противном случае его нельзя проверить правильно. То есть метод @Test (weder = bizexception.class) и метод wederex.expectxxx () в методе испытания не могут сосуществовать в то же время. 3. Параметрами в ожидаемом. 4. Другая вещь очень тяжелая, напишите протестированный метод, лежащий в основе метода wederex.expectxxx (), в противном случае исключение, которое не может быть проверено правильно 5. Последнее заключается в том, что, пока метод испытаний непосредственно бросает исключение тестируемого метода, он не повлияет на исключение, которое вы обеспокоены. Как упоминалось ранее, использование метода Try… Catch также может правильно проверить исключение. Каковы преимущества сравнения @Test (ожидаемое =…) или @Rule и попробовать ... метод поймать? Очевидно, что метод, рекомендованный JUNIT 4, является кратким и ясным. Давайте посмотрим, что Junit подтолкнет вас, когда тест не удастся?
Подсказка, которую вы получаете, когда тест не удался ненормально:
Когда нет исключения:
java.lang.assertionError: никаких исключений не брошено. at org.junit.assert.fail (assert.java:91) на cc.unmi.passwordtest.passwordllengthlessthan6lettersthrowsexception (PasswordTest.java:20)
Когда тип исключения неверен или сообщение об исключении неверно:
java.lang.assertionError: at org.junit.assert.fail (assert.java:91) на org.junit.asserttrue (assert.java:43) на org.junit.asserttru cc.unmi.passwordtest.passwordlengthlessThan6lettersThrowSexception (passwordTest.java:22)
Вышеуказанная помощь для ошибок позиционирования не особенно хороша. Посмотрите на подсказки, когда тест не удается, когда @test (weder = bizexception.class):
java.lang.assertionError: ожидаемое исключение: cc.test.bizexception at org.junit.internal.runners.statements.expectexception.Evaluate (wearsException.java:32) at org.junit.rules.expectedExcept
Используйте @rules wederexception, чтобы проверить исключения. Советы при неудаче:
java.lang.assertionError: ожидается: (исключение с сообщением строки, содержащей «Да. Требуется» и экземпляр java.lang.nullpointerexception) получил: at org.junit.assert.assertthat (assert.java:778) на org.junit.assertthat (assert.java org.junit.rules.expectedException $ wederexceptionStatement.Evaluate (wederException.java:114)
Особенно метод @rules wederexception четко знает, почему тест не удался. Какое исключение ожидается, какая строка содержится в сообщении исключения, какой тип исключения на самом деле получен и что является сообщением в исключении. При этом вы узнаете, как исправить свою программу, как только увидите ее.