категория 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