Топ контрибуторов
loading
loading
Знаете ли Вы, что

Список полученных сертификатов находится на странице Вашего профиля. Сертификаты можно распечатать или разместить на Вашем сайте.

Лента обновлений
ссылка 10:48:32
Комментарий от Petia_radivon:
Прекрасный тест. Узнал много чего нового . Спасибо...
ссылка 00:12:51
Комментарий от ilia:
Вопрос устарел: "Deprecated since version 3.0.0: db.collect...
ссылка 00:07:31
Комментарий от ilia:
Вопрос в текущей формулировке некорректен, так как write lo...
ссылка Dec 8 23:42
Комментарий от ilia:
Я тоже не в вижу в документации, что можно использовать кав...
ссылка Dec 8 13:11
Комментарий от Desperando1:
на самом деле очень много легаси с xml конфигами :)
...
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 446964 / 2193838.

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

head tail Статья
категория
Java Tools
дата28.06.2011
авторvisper
голосов11

Большинство 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/.  

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

Голосов: 11  loading...
alanjuk   AlexMKul   Rooman   san   jvalana   Skrakan   yohan   jauhien   KIKEP1990   bestie   vaseamorozov