This version of the page http://www.quizful.net/post/parameterized-junit-tests (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2012-07-24. The original page over time could change.
Использование JUnit параметризованных аннотаций
Для пользователей, которые регистрируются. Если Вам не приходит письмо с подтверждением email, пишите на admin[at]quizful[dot]net - будем подтверждать вручную. Просим прощения за доставленные неудобства.

С уважением,
команда Quizful
Знаете ли Вы, что

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

Топ контрибуторов
Лента обновлений
ссылка 19:28:30
Комментарий от llamerr:
хм, то ли что-то не то с комментариями то ли его удалили...
ссылка 18:05:14
Комментарий от kuzjka:
class ClassWithPrivateConstructor {
private String st...
ссылка 16:29:36
Комментарий от xray:
Нет, не все таки, локальная переменная может иметь любую дл...
ссылка 09:34:10
Комментарий от Oboronitel:
Шикарный вопрос)
ссылка Jul 23 23:54
Комментарий от llogovo:
результатом будет не доставленное письмо, добавьте как п...
Статистика

Тестов: 130, вопросов: 5794. Пройдено: 136252 / 576369.

Использование JUnit параметризованных аннотаций

Информация о статье
категория
Java Tools
дата28.06.2011
авторvisper
голосов7

Большинство JUnit пользователей не догадываются, что JUnit4 имеет некоторые новые полезные свойства. Одно из них – это параметризированные аннотации. С их помощью можно создать тестовой класс  и тестировать Ваш модуль, используя различные данные с помощью тестового класса.

Шаг 1.

Предполагается, что Вы знаете об аннотации @RunWith. С ее помощью надо аннотировать Ваш тестовый класс,  передав этой аннотации параметром значение Parameterized.class.

 

@RunWith(value = Parameterized.class)

public class ParametersTest {
    // ...
}

Шаг 2.

Вторым пунктом, на который Вы должны обратить внимание, является, метод, помеченный аннотацией @Parameters. Он должен быть статичным и возвратить коллекцию, коллекцию того, что Вам надо. Также надо объявить конструктор, параметрами которого будут элементы вашей коллекции. Этот момент очень важен. Пожалуйста, посмотрите на следующий пример:

 

@RunWith(value = Parameterized.class)

 public class ParametersTest {

 

         private String correctUrl;

         private String testUrl;

      

     public ParametersTest(String corUrl, String tstUrl){

         this.correctUrl = corUrl;

         this.testUrl = tstUrl;

     }

    

      @Parameters

      public static Collection<Object[]> data() {

        Object[][] data = new Object[][] {

{ "http://example.com/display?category=foo%2Fbar%20baz",

   "http://example.com/display?category=foo/bar+baz" },

             { "https://mail.google.com/dom1/",

                       "hTTPs://mail.GooGlE.coM/dom1/index.html" },

             { "http://example.com/dss/",

                       "http://example.com/dss" }};

        returnArrays.asList(data);

      }

    

}

 

Вы можете добавить любой тип к этой коллекции и вернуть его. Только не забудьте изменить при этом параметры конструктора в соответствие с Вашей коллекцией. В предыдущем примере в коллекции имеются пары URL – нормализированный и не нормализированный. Соответственно и конструктору передается пара URL. Вот и вся хитрость. Каждый раз при запуске теста данные поочередно будут считываться с Вашей коллекции, и будут передаваться конструктору. Это будет происходить столько раз, сколько данных иметься в Вашей коллекции.

 

Шаг 3.

Теперь нам надо написать сам тест. Это метод объявлен с аннотацией @Test.

 

@Test

public void tUrlNormalization(){

     String noNormalizedUrl = testUrl;

     URL locator = getLocator(noNormalizedUrl);

     URLNormalization test = new URLNormalization();

     test.setURLParameters(locator);

     String normalizedUrl = test.getNormalizeURL();

     assertEquals(correctUrl, normalizedUrl);                    //1

}

 

Нас будет интересовать  строчка (1). В ней средствами JUtil проверяется равность корректного нормализированного URL и того URL, который только что прошел нормализацию с помощью тестируемого класса. Все предыдущие строчки – это инициализация объекта тестируемого класса и проведение самой нормализации.


Ниже приведен параметризированный модульный тест:

 

package Tests;

 

import static org.junit.Assert.assertEquals;

 

import java.net.MalformedURLException;

import java.net.URL;

import java.util.Arrays;

import java.util.Collection;

 

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

 

import URL.URLNormalization;

 

@RunWith(value = Parameterized.class)

public class ParametersTest {

 

     private String correctUrl;

     private String testUrl;

      

    

     public ParametersTest(String corUrl, String tstUrl){

         this.correctUrl = corUrl;

         this.testUrl = tstUrl;

     }

    

     @Parameters

      public static Collection<Object[]> data() {

        Object[][] data = new Object[][] {

{ "http://example.com/display?category=foo%2Fbar%20baz",

   "http://example.com/display?category=foo/bar+baz" },

             { "https://mail.google.com/dom1/",

                       "hTTPs://mail.GooGlE.coM/dom1/index.html" },

             { "http://example.com/dss/",

                       "http://example.com/dss" }};

        returnArrays.asList(data);

      }

 

 // Этот тест будет выполняться 3 раза, так как мы определили 3 пары параметров в коллекции
           
@Test

     public void tUrlNormalization(){

         String noNormalizedUrl = testUrl;

         URL locator = getLocator(noNormalizedUrl);

         URLNormalization test = new URLNormalization();

         test.setURLParameters(locator);

         String normalizedUrl = test.getNormalizeURL();

         assertEquals(correctUrl, normalizedUrl);

     }

    

     private URL getLocator(String urlElement){

         URL locator = null;

         try{

              locator = new URL(urlElement);

         }

         catch(MalformedURLException e){

              locator = null;

         }

         return locator;

     }   

    

}

 

 

На этом все. Надеюсь, что эта статья дает некоторое представление об использовании аннотации @Parameters. За более детальной информацией обращайтесь к документации http://www.junit.org/.  

Если Вам понравилась статья, проголосуйте за нее

Голосов: 7  
alanjuk   AlexMKul   Rooman   san   jvalana   Skrakan   yohan