xref: /aosp_15_r20/external/junit-params/apidocs/junitparams/JUnitParamsRunner.html (revision b2c653efad15baf736c94ef04454e05088f2cbb7)
1*b2c653efSSorin Basca<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2*b2c653efSSorin Basca<!-- NewPage -->
3*b2c653efSSorin Basca<html lang="pl">
4*b2c653efSSorin Basca<head>
5*b2c653efSSorin Basca<!-- Generated by javadoc (1.8.0) on Mon Jul 28 12:08:59 CEST 2014 -->
6*b2c653efSSorin Basca<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7*b2c653efSSorin Basca<title>JUnitParamsRunner (JUnitParams 1.0.3-SNAPSHOT API)</title>
8*b2c653efSSorin Basca<meta name="date" content="2014-07-28">
9*b2c653efSSorin Basca<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
10*b2c653efSSorin Basca<script type="text/javascript" src="../script.js"></script>
11*b2c653efSSorin Basca</head>
12*b2c653efSSorin Basca<body>
13*b2c653efSSorin Basca<script type="text/javascript"><!--
14*b2c653efSSorin Basca    try {
15*b2c653efSSorin Basca        if (location.href.indexOf('is-external=true') == -1) {
16*b2c653efSSorin Basca            parent.document.title="JUnitParamsRunner (JUnitParams 1.0.3-SNAPSHOT API)";
17*b2c653efSSorin Basca        }
18*b2c653efSSorin Basca    }
19*b2c653efSSorin Basca    catch(err) {
20*b2c653efSSorin Basca    }
21*b2c653efSSorin Basca//-->
22*b2c653efSSorin Bascavar methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
23*b2c653efSSorin Bascavar tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
24*b2c653efSSorin Bascavar altColor = "altColor";
25*b2c653efSSorin Bascavar rowColor = "rowColor";
26*b2c653efSSorin Bascavar tableTab = "tableTab";
27*b2c653efSSorin Bascavar activeTableTab = "activeTableTab";
28*b2c653efSSorin Basca</script>
29*b2c653efSSorin Basca<noscript>
30*b2c653efSSorin Basca<div>JavaScript is disabled on your browser.</div>
31*b2c653efSSorin Basca</noscript>
32*b2c653efSSorin Basca<!-- ========= START OF TOP NAVBAR ======= -->
33*b2c653efSSorin Basca<div class="topNav"><a name="navbar.top">
34*b2c653efSSorin Basca<!--   -->
35*b2c653efSSorin Basca</a>
36*b2c653efSSorin Basca<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
37*b2c653efSSorin Basca<a name="navbar.top.firstrow">
38*b2c653efSSorin Basca<!--   -->
39*b2c653efSSorin Basca</a>
40*b2c653efSSorin Basca<ul class="navList" title="Navigation">
41*b2c653efSSorin Basca<li><a href="../overview-summary.html">Overview</a></li>
42*b2c653efSSorin Basca<li><a href="package-summary.html">Package</a></li>
43*b2c653efSSorin Basca<li class="navBarCell1Rev">Class</li>
44*b2c653efSSorin Basca<li><a href="class-use/JUnitParamsRunner.html">Use</a></li>
45*b2c653efSSorin Basca<li><a href="package-tree.html">Tree</a></li>
46*b2c653efSSorin Basca<li><a href="../deprecated-list.html">Deprecated</a></li>
47*b2c653efSSorin Basca<li><a href="../index-all.html">Index</a></li>
48*b2c653efSSorin Basca<li><a href="../help-doc.html">Help</a></li>
49*b2c653efSSorin Basca</ul>
50*b2c653efSSorin Basca</div>
51*b2c653efSSorin Basca<div class="subNav">
52*b2c653efSSorin Basca<ul class="navList">
53*b2c653efSSorin Basca<li><a href="../junitparams/FileParameters.html" title="annotation in junitparams"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
54*b2c653efSSorin Basca<li><a href="../junitparams/Parameters.html" title="annotation in junitparams"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
55*b2c653efSSorin Basca</ul>
56*b2c653efSSorin Basca<ul class="navList">
57*b2c653efSSorin Basca<li><a href="../index.html?junitparams/JUnitParamsRunner.html" target="_top">Frames</a></li>
58*b2c653efSSorin Basca<li><a href="JUnitParamsRunner.html" target="_top">No&nbsp;Frames</a></li>
59*b2c653efSSorin Basca</ul>
60*b2c653efSSorin Basca<ul class="navList" id="allclasses_navbar_top">
61*b2c653efSSorin Basca<li><a href="../allclasses-noframe.html">All&nbsp;Classes</a></li>
62*b2c653efSSorin Basca</ul>
63*b2c653efSSorin Basca<div>
64*b2c653efSSorin Basca<script type="text/javascript"><!--
65*b2c653efSSorin Basca  allClassesLink = document.getElementById("allclasses_navbar_top");
66*b2c653efSSorin Basca  if(window==top) {
67*b2c653efSSorin Basca    allClassesLink.style.display = "block";
68*b2c653efSSorin Basca  }
69*b2c653efSSorin Basca  else {
70*b2c653efSSorin Basca    allClassesLink.style.display = "none";
71*b2c653efSSorin Basca  }
72*b2c653efSSorin Basca  //-->
73*b2c653efSSorin Basca</script>
74*b2c653efSSorin Basca</div>
75*b2c653efSSorin Basca<div>
76*b2c653efSSorin Basca<ul class="subNavList">
77*b2c653efSSorin Basca<li>Summary:&nbsp;</li>
78*b2c653efSSorin Basca<li>Nested&nbsp;|&nbsp;</li>
79*b2c653efSSorin Basca<li>Field&nbsp;|&nbsp;</li>
80*b2c653efSSorin Basca<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
81*b2c653efSSorin Basca<li><a href="#method.summary">Method</a></li>
82*b2c653efSSorin Basca</ul>
83*b2c653efSSorin Basca<ul class="subNavList">
84*b2c653efSSorin Basca<li>Detail:&nbsp;</li>
85*b2c653efSSorin Basca<li>Field&nbsp;|&nbsp;</li>
86*b2c653efSSorin Basca<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
87*b2c653efSSorin Basca<li><a href="#method.detail">Method</a></li>
88*b2c653efSSorin Basca</ul>
89*b2c653efSSorin Basca</div>
90*b2c653efSSorin Basca<a name="skip.navbar.top">
91*b2c653efSSorin Basca<!--   -->
92*b2c653efSSorin Basca</a></div>
93*b2c653efSSorin Basca<!-- ========= END OF TOP NAVBAR ========= -->
94*b2c653efSSorin Basca<!-- ======== START OF CLASS DATA ======== -->
95*b2c653efSSorin Basca<div class="header">
96*b2c653efSSorin Basca<div class="subTitle">junitparams</div>
97*b2c653efSSorin Basca<h2 title="Class JUnitParamsRunner" class="title">Class JUnitParamsRunner</h2>
98*b2c653efSSorin Basca</div>
99*b2c653efSSorin Basca<div class="contentContainer">
100*b2c653efSSorin Basca<ul class="inheritance">
101*b2c653efSSorin Basca<li><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
102*b2c653efSSorin Basca<li>
103*b2c653efSSorin Basca<ul class="inheritance">
104*b2c653efSSorin Basca<li>org.junit.runner.Runner</li>
105*b2c653efSSorin Basca<li>
106*b2c653efSSorin Basca<ul class="inheritance">
107*b2c653efSSorin Basca<li>org.junit.runners.ParentRunner&lt;org.junit.runners.model.FrameworkMethod&gt;</li>
108*b2c653efSSorin Basca<li>
109*b2c653efSSorin Basca<ul class="inheritance">
110*b2c653efSSorin Basca<li>org.junit.runners.BlockJUnit4ClassRunner</li>
111*b2c653efSSorin Basca<li>
112*b2c653efSSorin Basca<ul class="inheritance">
113*b2c653efSSorin Basca<li>junitparams.JUnitParamsRunner</li>
114*b2c653efSSorin Basca</ul>
115*b2c653efSSorin Basca</li>
116*b2c653efSSorin Basca</ul>
117*b2c653efSSorin Basca</li>
118*b2c653efSSorin Basca</ul>
119*b2c653efSSorin Basca</li>
120*b2c653efSSorin Basca</ul>
121*b2c653efSSorin Basca</li>
122*b2c653efSSorin Basca</ul>
123*b2c653efSSorin Basca<div class="description">
124*b2c653efSSorin Basca<ul class="blockList">
125*b2c653efSSorin Basca<li class="blockList">
126*b2c653efSSorin Basca<dl>
127*b2c653efSSorin Basca<dt>All Implemented Interfaces:</dt>
128*b2c653efSSorin Basca<dd>org.junit.runner.Describable, org.junit.runner.manipulation.Filterable, org.junit.runner.manipulation.Sortable</dd>
129*b2c653efSSorin Basca</dl>
130*b2c653efSSorin Basca<hr>
131*b2c653efSSorin Basca<br>
132*b2c653efSSorin Basca<pre>public class <span class="typeNameLabel">JUnitParamsRunner</span>
133*b2c653efSSorin Bascaextends org.junit.runners.BlockJUnit4ClassRunner</pre>
134*b2c653efSSorin Basca<div class="block"><h1>JUnitParams</h1><br>
135*b2c653efSSorin Basca <p>
136*b2c653efSSorin Basca This is a JUnit runner for parameterised tests that don't suck. Annotate your test class with
137*b2c653efSSorin Basca <code>&#064;RunWith(JUnitParamsRunner.class)</code> and place
138*b2c653efSSorin Basca <code>&#064;Parameters</code> annotation on each test method which requires
139*b2c653efSSorin Basca parameters. Nothing more needed - no special structure, no dirty tricks.
140*b2c653efSSorin Basca </p>
141*b2c653efSSorin Basca <br>
142*b2c653efSSorin Basca <h2>Contents</h2> <b> <a href="#p1">1. Parameterising tests</a><br>
143*b2c653efSSorin Basca &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#a">a. Parameterising tests via values
144*b2c653efSSorin Basca in annotation</a><br>
145*b2c653efSSorin Basca &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#b">b. Parameterising tests via a
146*b2c653efSSorin Basca method that returns parameter values</a><br>
147*b2c653efSSorin Basca &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#c">c. Parameterising tests via
148*b2c653efSSorin Basca external classes</a><br>
149*b2c653efSSorin Basca &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#d">d. Loading parameters from files</a><br>
150*b2c653efSSorin Basca &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#d">e. Converting parameter values</a><br>
151*b2c653efSSorin Basca <a href="#p2">2. Usage with Spring</a><br>
152*b2c653efSSorin Basca <a href="#p3">3. Other options</a><br>
153*b2c653efSSorin Basca </b><br>
154*b2c653efSSorin Basca <h3 id="p1">1. Parameterising tests</h3> Parameterised tests are a great way
155*b2c653efSSorin Basca to limit the amount of test code when you need to test the same code under
156*b2c653efSSorin Basca different conditions. Ever tried to do it with standard JUnit tools like
157*b2c653efSSorin Basca Parameterized runner or Theories? I always thought they're so awkward to use,
158*b2c653efSSorin Basca that I've written this library to help all those out there who'd like to have
159*b2c653efSSorin Basca a handy tool.
160*b2c653efSSorin Basca
161*b2c653efSSorin Basca So here we go. There are a few different ways to use JUnitParams, I will try
162*b2c653efSSorin Basca to show you all of them here.
163*b2c653efSSorin Basca
164*b2c653efSSorin Basca <h4 id="a">a. Parameterising tests via values in annotation</h4>
165*b2c653efSSorin Basca <p>
166*b2c653efSSorin Basca You can parameterise your test with values defined in annotations. Just pass
167*b2c653efSSorin Basca sets of test method argument values as an array of Strings, where each string
168*b2c653efSSorin Basca contains the argument values separated by a comma or a pipe "|".
169*b2c653efSSorin Basca
170*b2c653efSSorin Basca <pre>
171*b2c653efSSorin Basca   &#064;Test
172*b2c653efSSorin Basca   &#064;Parameters({ "20, Tarzan", "0, Jane" })
173*b2c653efSSorin Basca   public void cartoonCharacters(int yearsInJungle, String person) {
174*b2c653efSSorin Basca       ...
175*b2c653efSSorin Basca   }
176*b2c653efSSorin Basca </pre>
177*b2c653efSSorin Basca
178*b2c653efSSorin Basca Sometimes you may be interested in passing enum values as parameters, then
179*b2c653efSSorin Basca you can just write them as Strings like this:
180*b2c653efSSorin Basca
181*b2c653efSSorin Basca <pre>
182*b2c653efSSorin Basca &#064;Test
183*b2c653efSSorin Basca &#064;Parameters({ &quot;FROM_JUNGLE&quot;, &quot;FROM_CITY&quot; })
184*b2c653efSSorin Basca public void passEnumAsParam(PersonType person) {
185*b2c653efSSorin Basca }
186*b2c653efSSorin Basca </pre>
187*b2c653efSSorin Basca
188*b2c653efSSorin Basca <h4 id="b">b. Parameterising tests via a method that returns parameter values
189*b2c653efSSorin Basca </h4>
190*b2c653efSSorin Basca <p>
191*b2c653efSSorin Basca Obivously passing parameters as strings is handy only for trivial situations,
192*b2c653efSSorin Basca that's why for normal cases you have a method that gives you a collection of
193*b2c653efSSorin Basca parameters:
194*b2c653efSSorin Basca
195*b2c653efSSorin Basca <pre>
196*b2c653efSSorin Basca   &#064;Test
197*b2c653efSSorin Basca   &#064;Parameters(method = "cartoonCharacters")
198*b2c653efSSorin Basca   public void cartoonCharacters(int yearsInJungle, String person) {
199*b2c653efSSorin Basca       ...
200*b2c653efSSorin Basca   }
201*b2c653efSSorin Basca   private Object[] cartoonCharacters() {
202*b2c653efSSorin Basca      return $(
203*b2c653efSSorin Basca          $(0, "Tarzan"),
204*b2c653efSSorin Basca          $(20, "Jane")
205*b2c653efSSorin Basca      );
206*b2c653efSSorin Basca   }
207*b2c653efSSorin Basca </pre>
208*b2c653efSSorin Basca
209*b2c653efSSorin Basca Where <code>$(...)</code> is a static method defined in
210*b2c653efSSorin Basca <code>JUnitParamsRunner</code> class, which returns its parameters as a
211*b2c653efSSorin Basca <code>Object[]</code> array. Just a shortcut, so that you don't need to write the ugly <code>new Object[] {}</code> kind of stuff.
212*b2c653efSSorin Basca
213*b2c653efSSorin Basca <p>
214*b2c653efSSorin Basca <code>method</code> can take more than one method name - you can pass as many
215*b2c653efSSorin Basca of them as you want, separated by commas. This enables you to divide your
216*b2c653efSSorin Basca test cases e.g. into categories.
217*b2c653efSSorin Basca <pre>
218*b2c653efSSorin Basca   &#064;Test
219*b2c653efSSorin Basca   &#064;Parameters(method = "menCharactes, womenCharacters")
220*b2c653efSSorin Basca   public void cartoonCharacters(int yearsInJungle, String person) {
221*b2c653efSSorin Basca       ...
222*b2c653efSSorin Basca   }
223*b2c653efSSorin Basca   private Object[] menCharacters() {
224*b2c653efSSorin Basca      return $(
225*b2c653efSSorin Basca          $(20, "Tarzan"),
226*b2c653efSSorin Basca          $(2, "Chip"),
227*b2c653efSSorin Basca          $(2, "Dale")
228*b2c653efSSorin Basca      );
229*b2c653efSSorin Basca   }
230*b2c653efSSorin Basca   private Object[] womenCharacters() {
231*b2c653efSSorin Basca      return $(
232*b2c653efSSorin Basca          $(0, "Jane"),
233*b2c653efSSorin Basca          $(18, "Pocahontas")
234*b2c653efSSorin Basca      );
235*b2c653efSSorin Basca   }
236*b2c653efSSorin Basca </pre>
237*b2c653efSSorin Basca <p>
238*b2c653efSSorin Basca The <code>method</code> argument of a <code>@Parameters</code> annotation can
239*b2c653efSSorin Basca be ommited if the method that provides parameters has a the same name as the
240*b2c653efSSorin Basca test, but prefixed by <code>parametersFor</code>. So our example would look
241*b2c653efSSorin Basca like this:
242*b2c653efSSorin Basca
243*b2c653efSSorin Basca <pre>
244*b2c653efSSorin Basca   &#064;Test
245*b2c653efSSorin Basca   &#064;Parameters
246*b2c653efSSorin Basca   public void cartoonCharacters(int yearsInJungle, String person) {
247*b2c653efSSorin Basca       ...
248*b2c653efSSorin Basca   }
249*b2c653efSSorin Basca   private Object[] parametersForCartoonCharacters() {
250*b2c653efSSorin Basca      return $(
251*b2c653efSSorin Basca          $(0, "Tarzan"),
252*b2c653efSSorin Basca          $(20, "Jane")
253*b2c653efSSorin Basca      );
254*b2c653efSSorin Basca   }
255*b2c653efSSorin Basca </pre>
256*b2c653efSSorin Basca
257*b2c653efSSorin Basca <p>
258*b2c653efSSorin Basca If you don't like returning untyped values and arrays, you can equally well
259*b2c653efSSorin Basca return any Iterable of concrete objects:
260*b2c653efSSorin Basca
261*b2c653efSSorin Basca <pre>
262*b2c653efSSorin Basca   &#064;Test
263*b2c653efSSorin Basca   &#064;Parameters
264*b2c653efSSorin Basca   public void cartoonCharacters(Person character) {
265*b2c653efSSorin Basca       ...
266*b2c653efSSorin Basca   }
267*b2c653efSSorin Basca   private List&lt;Person&gt; parametersForCartoonCharacters() {
268*b2c653efSSorin Basca      return Arrays.asList(
269*b2c653efSSorin Basca          new Person(0, "Tarzan"),
270*b2c653efSSorin Basca          new Person(20, "Jane")
271*b2c653efSSorin Basca      );
272*b2c653efSSorin Basca   }
273*b2c653efSSorin Basca </pre>
274*b2c653efSSorin Basca
275*b2c653efSSorin Basca If we had more than just two Person's to make, we would get redundant,
276*b2c653efSSorin Basca so JUnitParams gives you a simplified way of creating objects to be passed as
277*b2c653efSSorin Basca params. You can omit the creation of the objects and just return their constructor
278*b2c653efSSorin Basca argument values like this:
279*b2c653efSSorin Basca
280*b2c653efSSorin Basca <pre>
281*b2c653efSSorin Basca   &#064;Test
282*b2c653efSSorin Basca   &#064;Parameters
283*b2c653efSSorin Basca   public void cartoonCharacters(Person character) {
284*b2c653efSSorin Basca       ...
285*b2c653efSSorin Basca   }
286*b2c653efSSorin Basca   private List&lt;?&gt; parametersForCartoonCharacters() {
287*b2c653efSSorin Basca      return Arrays.asList(
288*b2c653efSSorin Basca          $(0, "Tarzan"),
289*b2c653efSSorin Basca          $(20, "Jane")
290*b2c653efSSorin Basca      );
291*b2c653efSSorin Basca   }
292*b2c653efSSorin Basca </pre>
293*b2c653efSSorin Basca And JUnitParams will invoke the appropriate constructor (<code>new Person(int age, String name)</code> in this case.)
294*b2c653efSSorin Basca <b>If you want to use it, watch out! Automatic refactoring of constructor
295*b2c653efSSorin Basca arguments won't be working here!</b>
296*b2c653efSSorin Basca
297*b2c653efSSorin Basca <p>
298*b2c653efSSorin Basca You can also define methods that provide parameters in subclasses and use
299*b2c653efSSorin Basca them in test methods defined in superclasses, as well as redefine data
300*b2c653efSSorin Basca providing methods in subclasses to be used by test method defined in a
301*b2c653efSSorin Basca superclass. That you can doesn't mean you should. Inheritance in tests is
302*b2c653efSSorin Basca usually a code smell (readability hurts), so make sure you know what you're
303*b2c653efSSorin Basca doing.
304*b2c653efSSorin Basca
305*b2c653efSSorin Basca <h4 id="c">c. Parameterising tests via external classes</h4>
306*b2c653efSSorin Basca <p>
307*b2c653efSSorin Basca For more complex cases you may want to externalise the method that provides
308*b2c653efSSorin Basca parameters or use more than one method to provide parameters to a single test
309*b2c653efSSorin Basca method. You can easily do that like this:
310*b2c653efSSorin Basca
311*b2c653efSSorin Basca <pre>
312*b2c653efSSorin Basca   &#064;Test
313*b2c653efSSorin Basca   &#064;Parameters(source = CartoonCharactersProvider.class)
314*b2c653efSSorin Basca   public void testReadyToLiveInJungle(int yearsInJungle, String person) {
315*b2c653efSSorin Basca       ...
316*b2c653efSSorin Basca   }
317*b2c653efSSorin Basca   ...
318*b2c653efSSorin Basca   class CartoonCharactersProvider {
319*b2c653efSSorin Basca      public static Object[] provideCartoonCharactersManually() {
320*b2c653efSSorin Basca          return $(
321*b2c653efSSorin Basca              $(0, "Tarzan"),
322*b2c653efSSorin Basca              $(20, "Jane")
323*b2c653efSSorin Basca          );
324*b2c653efSSorin Basca      }
325*b2c653efSSorin Basca      public static Object[] provideCartoonCharactersFromDB() {
326*b2c653efSSorin Basca          return cartoonsRepository.loadCharacters();
327*b2c653efSSorin Basca      }
328*b2c653efSSorin Basca   }
329*b2c653efSSorin Basca </pre>
330*b2c653efSSorin Basca
331*b2c653efSSorin Basca All methods starting with <code>provide</code> are used as parameter
332*b2c653efSSorin Basca providers.
333*b2c653efSSorin Basca
334*b2c653efSSorin Basca <p>
335*b2c653efSSorin Basca Sometimes though you may want to use just one or few methods of some class to
336*b2c653efSSorin Basca provide you parameters. This can be done as well like this:
337*b2c653efSSorin Basca
338*b2c653efSSorin Basca <pre>
339*b2c653efSSorin Basca   &#064;Test
340*b2c653efSSorin Basca   &#064;Parameters(source = CartoonCharactersProvider.class, method = "cinderellaCharacters,snowwhiteCharacters")
341*b2c653efSSorin Basca   public void testPrincesses(boolean isAPrincess, String characterName) {
342*b2c653efSSorin Basca       ...
343*b2c653efSSorin Basca   }
344*b2c653efSSorin Basca </pre>
345*b2c653efSSorin Basca
346*b2c653efSSorin Basca
347*b2c653efSSorin Basca <h4 id="d">d. Loading parameters from files</h4> You may be interested in
348*b2c653efSSorin Basca loading parameters from a file. This is very easy if it's a CSV file with
349*b2c653efSSorin Basca columns in the same order as test method parameters:
350*b2c653efSSorin Basca
351*b2c653efSSorin Basca <pre>
352*b2c653efSSorin Basca   &#064;Test
353*b2c653efSSorin Basca   &#064;FileParameters("cartoon-characters.csv")
354*b2c653efSSorin Basca   public void shouldSurviveInJungle(int yearsInJungle, String person) {
355*b2c653efSSorin Basca       ...
356*b2c653efSSorin Basca   }
357*b2c653efSSorin Basca </pre>
358*b2c653efSSorin Basca
359*b2c653efSSorin Basca But if you want to process the data from the CSV file a bit to use it in the
360*b2c653efSSorin Basca test method arguments, you
361*b2c653efSSorin Basca need to use an <code>IdentityMapper</code>. Look:
362*b2c653efSSorin Basca
363*b2c653efSSorin Basca <pre>
364*b2c653efSSorin Basca   &#064;Test
365*b2c653efSSorin Basca   &#064;FileParameters(value = "cartoon-characters.csv", mapper = CartoonMapper.class)
366*b2c653efSSorin Basca   public void shouldSurviveInJungle(Person person) {
367*b2c653efSSorin Basca       ...
368*b2c653efSSorin Basca   }
369*b2c653efSSorin Basca
370*b2c653efSSorin Basca   public class CartoonMapper extends IdentityMapper {
371*b2c653efSSorin Basca     &#064;Override
372*b2c653efSSorin Basca     public Object[] map(Reader reader) {
373*b2c653efSSorin Basca         Object[] map = super.map(reader);
374*b2c653efSSorin Basca         List&lt;Object[]&gt; result = new LinkedList&lt;Object[]&gt;();
375*b2c653efSSorin Basca         for (Object lineObj : map) {
376*b2c653efSSorin Basca             String line = (String) lineObj; // line in a format just like in the file
377*b2c653efSSorin Basca             result.add(new Object[] { ..... }); // some format edible by the test method
378*b2c653efSSorin Basca         }
379*b2c653efSSorin Basca         return result.toArray();
380*b2c653efSSorin Basca     }
381*b2c653efSSorin Basca
382*b2c653efSSorin Basca }
383*b2c653efSSorin Basca </pre>
384*b2c653efSSorin Basca
385*b2c653efSSorin Basca A CSV files with a header are also supported with the use of <code>CsvWithHeaderMapper</code> class.
386*b2c653efSSorin Basca
387*b2c653efSSorin Basca You may also want to use a completely different file format, like excel or
388*b2c653efSSorin Basca something. Then just parse it yourself:
389*b2c653efSSorin Basca
390*b2c653efSSorin Basca <pre>
391*b2c653efSSorin Basca   &#064;Test
392*b2c653efSSorin Basca   &#064;FileParameters(value = "cartoon-characters.xsl", mapper = ExcelCartoonMapper.class)
393*b2c653efSSorin Basca   public void shouldSurviveInJungle(Person person) {
394*b2c653efSSorin Basca       ...
395*b2c653efSSorin Basca   }
396*b2c653efSSorin Basca
397*b2c653efSSorin Basca   public class CartoonMapper implements DataMapper {
398*b2c653efSSorin Basca     &#064;Override
399*b2c653efSSorin Basca     public Object[] map(Reader fileReader) {
400*b2c653efSSorin Basca         ...
401*b2c653efSSorin Basca     }
402*b2c653efSSorin Basca }
403*b2c653efSSorin Basca </pre>
404*b2c653efSSorin Basca
405*b2c653efSSorin Basca As you see, you don't need to open or close the file. Just read it from the
406*b2c653efSSorin Basca reader and parse it the way you wish.
407*b2c653efSSorin Basca
408*b2c653efSSorin Basca By default the file is loaded from the file system, relatively to where you start the tests from. But you can also use a resource from
409*b2c653efSSorin Basca the classpath by prefixing the file name with <code>classpath:</code>
410*b2c653efSSorin Basca
411*b2c653efSSorin Basca <h4 id="e">e. Converting parameter values</h4>
412*b2c653efSSorin Basca Sometimes you want to pass some parameter in one form, but use it in the test in another. Dates are a good example. It's handy to
413*b2c653efSSorin Basca specify them in the parameters as a String like "2013.01.01", but you'd like to use a Jodatime's LocalDate or JDKs Date in the test
414*b2c653efSSorin Basca without manually converting the value in the test. This is where the converters become handy. It's enough to annotate a parameter with
415*b2c653efSSorin Basca a <code>&#064;ConvertParam</code> annotation, give it a converter class and possibly some options (like date format in this case) and
416*b2c653efSSorin Basca you're done. Here's an example:
417*b2c653efSSorin Basca <pre>
418*b2c653efSSorin Basca     &#064;Test
419*b2c653efSSorin Basca     &#064;Parameters({ "01.12.2012, A" })
420*b2c653efSSorin Basca     public void convertMultipleParams(
421*b2c653efSSorin Basca                  &#064;ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date,
422*b2c653efSSorin Basca                  &#064;ConvertParam(LetterToASCIIConverter.class) int num) {
423*b2c653efSSorin Basca
424*b2c653efSSorin Basca         Calendar calendar = Calendar.getInstance();
425*b2c653efSSorin Basca         calendar.setTime(date);
426*b2c653efSSorin Basca
427*b2c653efSSorin Basca         assertEquals(2012, calendar.get(Calendar.YEAR));
428*b2c653efSSorin Basca         assertEquals(11, calendar.get(Calendar.MONTH));
429*b2c653efSSorin Basca         assertEquals(1, calendar.get(Calendar.DAY_OF_MONTH));
430*b2c653efSSorin Basca
431*b2c653efSSorin Basca         assertEquals(65, num);
432*b2c653efSSorin Basca     }
433*b2c653efSSorin Basca </pre>
434*b2c653efSSorin Basca
435*b2c653efSSorin Basca <h3 id="p2">2. Usage with Spring</h3>
436*b2c653efSSorin Basca <p>
437*b2c653efSSorin Basca You can easily use JUnitParams together with Spring. The only problem is that
438*b2c653efSSorin Basca Spring's test framework is based on JUnit runners, and JUnit allows only one
439*b2c653efSSorin Basca runner to be run at once. Which would normally mean that you could use only
440*b2c653efSSorin Basca one of Spring or JUnitParams. Luckily we can cheat Spring a little by adding
441*b2c653efSSorin Basca this to your test class:
442*b2c653efSSorin Basca
443*b2c653efSSorin Basca <pre>
444*b2c653efSSorin Basca private TestContextManager testContextManager;
445*b2c653efSSorin Basca
446*b2c653efSSorin Basca &#064;Before
447*b2c653efSSorin Basca public void init() throws Exception {
448*b2c653efSSorin Basca     this.testContextManager = new TestContextManager(getClass());
449*b2c653efSSorin Basca     this.testContextManager.prepareTestInstance(this);
450*b2c653efSSorin Basca }
451*b2c653efSSorin Basca </pre>
452*b2c653efSSorin Basca
453*b2c653efSSorin Basca This lets you use in your tests anything that Spring provides in its test
454*b2c653efSSorin Basca framework.
455*b2c653efSSorin Basca
456*b2c653efSSorin Basca <h3 id="p3">3. Other options</h3> <h4>Customizing how parameter objects are
457*b2c653efSSorin Basca shown in IDE</h4>
458*b2c653efSSorin Basca <p>
459*b2c653efSSorin Basca Tests show up in your IDE as a tree with test class name being the root, test
460*b2c653efSSorin Basca methods being nodes, and parameter sets being the leaves. If you want to
461*b2c653efSSorin Basca customize the way an parameter object is shown, create a <b>toString</b>
462*b2c653efSSorin Basca method for it.
463*b2c653efSSorin Basca <h4>Empty parameter sets</h4>
464*b2c653efSSorin Basca <p>
465*b2c653efSSorin Basca If you create a parameterised test, but won't give it any parameter sets, it
466*b2c653efSSorin Basca will be ignored and you'll be warned about it.
467*b2c653efSSorin Basca <h4>Parameterised test with no parameters</h4>
468*b2c653efSSorin Basca <p>
469*b2c653efSSorin Basca If for some reason you want to have a normal non-parameterised method to be
470*b2c653efSSorin Basca annotated with @Parameters, then fine, you can do it. But it will be ignored
471*b2c653efSSorin Basca then, since there won't be any params for it, and parameterised tests need
472*b2c653efSSorin Basca parameters to execute properly (parameters are a part of test setup, right?)
473*b2c653efSSorin Basca <h4>JUnit Rules</h4>
474*b2c653efSSorin Basca <p>
475*b2c653efSSorin Basca The runner for parameterised test is trying to keep all the @Rule's running,
476*b2c653efSSorin Basca but if something doesn't work - let me know. It's pretty tricky, since the
477*b2c653efSSorin Basca rules in JUnit are chained, but the chain is kind of... unstructured, so
478*b2c653efSSorin Basca sometimes I need to guess how to call the next element in chain. If you have
479*b2c653efSSorin Basca your own rule, make sure it has a field of type Statement which is the next
480*b2c653efSSorin Basca statement in chain to call.
481*b2c653efSSorin Basca <h4>Test inheritance</h4>
482*b2c653efSSorin Basca <p>
483*b2c653efSSorin Basca Although usually a bad idea, since it makes tests less readable, sometimes
484*b2c653efSSorin Basca inheritance is the best way to remove repetitions from tests. JUnitParams is
485*b2c653efSSorin Basca fine with inheritance - you can define a common test in the superclass, and
486*b2c653efSSorin Basca have separate parameters provider methods in the subclasses. Also the other
487*b2c653efSSorin Basca way around is ok, you can define parameter providers in superclass and have
488*b2c653efSSorin Basca tests in subclasses uses them as their input.</div>
489*b2c653efSSorin Basca<dl>
490*b2c653efSSorin Basca<dt><span class="simpleTagLabel">Author:</span></dt>
491*b2c653efSSorin Basca<dd>Pawel Lipinski ([email protected])</dd>
492*b2c653efSSorin Basca</dl>
493*b2c653efSSorin Basca</li>
494*b2c653efSSorin Basca</ul>
495*b2c653efSSorin Basca</div>
496*b2c653efSSorin Basca<div class="summary">
497*b2c653efSSorin Basca<ul class="blockList">
498*b2c653efSSorin Basca<li class="blockList">
499*b2c653efSSorin Basca<!-- ======== CONSTRUCTOR SUMMARY ======== -->
500*b2c653efSSorin Basca<ul class="blockList">
501*b2c653efSSorin Basca<li class="blockList"><a name="constructor.summary">
502*b2c653efSSorin Basca<!--   -->
503*b2c653efSSorin Basca</a>
504*b2c653efSSorin Basca<h3>Constructor Summary</h3>
505*b2c653efSSorin Basca<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
506*b2c653efSSorin Basca<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
507*b2c653efSSorin Basca<tr>
508*b2c653efSSorin Basca<th class="colOne" scope="col">Constructor and Description</th>
509*b2c653efSSorin Basca</tr>
510*b2c653efSSorin Basca<tr class="altColor">
511*b2c653efSSorin Basca<td class="colOne"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#JUnitParamsRunner-java.lang.Class-">JUnitParamsRunner</a></span>(<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;klass)</code>&nbsp;</td>
512*b2c653efSSorin Basca</tr>
513*b2c653efSSorin Basca</table>
514*b2c653efSSorin Basca</li>
515*b2c653efSSorin Basca</ul>
516*b2c653efSSorin Basca<!-- ========== METHOD SUMMARY =========== -->
517*b2c653efSSorin Basca<ul class="blockList">
518*b2c653efSSorin Basca<li class="blockList"><a name="method.summary">
519*b2c653efSSorin Basca<!--   -->
520*b2c653efSSorin Basca</a>
521*b2c653efSSorin Basca<h3>Method Summary</h3>
522*b2c653efSSorin Basca<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
523*b2c653efSSorin Basca<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
524*b2c653efSSorin Basca<tr>
525*b2c653efSSorin Basca<th class="colFirst" scope="col">Modifier and Type</th>
526*b2c653efSSorin Basca<th class="colLast" scope="col">Method and Description</th>
527*b2c653efSSorin Basca</tr>
528*b2c653efSSorin Basca<tr id="i0" class="altColor">
529*b2c653efSSorin Basca<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]</code></td>
530*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#Z:Z:D-java.lang.Object...-">$</a></span>(<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;params)</code>
531*b2c653efSSorin Basca<div class="block">Shortcut for returning an array of objects.</div>
532*b2c653efSSorin Basca</td>
533*b2c653efSSorin Basca</tr>
534*b2c653efSSorin Basca<tr id="i1" class="rowColor">
535*b2c653efSSorin Basca<td class="colFirst"><code>protected void</code></td>
536*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#collectInitializationErrors-java.util.List-">collectInitializationErrors</a></span>(<a href="http://docs.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt;&nbsp;errors)</code>&nbsp;</td>
537*b2c653efSSorin Basca</tr>
538*b2c653efSSorin Basca<tr id="i2" class="altColor">
539*b2c653efSSorin Basca<td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.junit.runners.model.FrameworkMethod&gt;</code></td>
540*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#computeTestMethods--">computeTestMethods</a></span>()</code>&nbsp;</td>
541*b2c653efSSorin Basca</tr>
542*b2c653efSSorin Basca<tr id="i3" class="rowColor">
543*b2c653efSSorin Basca<td class="colFirst"><code>protected org.junit.runner.Description</code></td>
544*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#describeMethod-org.junit.runners.model.FrameworkMethod-">describeMethod</a></span>(org.junit.runners.model.FrameworkMethod&nbsp;method)</code>&nbsp;</td>
545*b2c653efSSorin Basca</tr>
546*b2c653efSSorin Basca<tr id="i4" class="altColor">
547*b2c653efSSorin Basca<td class="colFirst"><code>org.junit.runner.Description</code></td>
548*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#getDescription--">getDescription</a></span>()</code>&nbsp;</td>
549*b2c653efSSorin Basca</tr>
550*b2c653efSSorin Basca<tr id="i5" class="rowColor">
551*b2c653efSSorin Basca<td class="colFirst"><code>protected org.junit.runners.model.Statement</code></td>
552*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#methodInvoker-org.junit.runners.model.FrameworkMethod-java.lang.Object-">methodInvoker</a></span>(org.junit.runners.model.FrameworkMethod&nbsp;method,
553*b2c653efSSorin Basca             <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;test)</code>&nbsp;</td>
554*b2c653efSSorin Basca</tr>
555*b2c653efSSorin Basca<tr id="i6" class="altColor">
556*b2c653efSSorin Basca<td class="colFirst"><code>protected void</code></td>
557*b2c653efSSorin Basca<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#runChild-org.junit.runners.model.FrameworkMethod-org.junit.runner.notification.RunNotifier-">runChild</a></span>(org.junit.runners.model.FrameworkMethod&nbsp;method,
558*b2c653efSSorin Basca        org.junit.runner.notification.RunNotifier&nbsp;notifier)</code>&nbsp;</td>
559*b2c653efSSorin Basca</tr>
560*b2c653efSSorin Basca</table>
561*b2c653efSSorin Basca<ul class="blockList">
562*b2c653efSSorin Basca<li class="blockList"><a name="methods.inherited.from.class.org.junit.runners.BlockJUnit4ClassRunner">
563*b2c653efSSorin Basca<!--   -->
564*b2c653efSSorin Basca</a>
565*b2c653efSSorin Basca<h3>Methods inherited from class&nbsp;org.junit.runners.BlockJUnit4ClassRunner</h3>
566*b2c653efSSorin Basca<code>createTest, describeChild, getChildren, getTestRules, methodBlock, possiblyExpectingExceptions, rules, testName, validateConstructor, validateFields, validateInstanceMethods, validateNoNonStaticInnerClass, validateOnlyOneConstructor, validateTestMethods, validateZeroArgConstructor, withAfters, withBefores, withPotentialTimeout</code></li>
567*b2c653efSSorin Basca</ul>
568*b2c653efSSorin Basca<ul class="blockList">
569*b2c653efSSorin Basca<li class="blockList"><a name="methods.inherited.from.class.org.junit.runners.ParentRunner">
570*b2c653efSSorin Basca<!--   -->
571*b2c653efSSorin Basca</a>
572*b2c653efSSorin Basca<h3>Methods inherited from class&nbsp;org.junit.runners.ParentRunner</h3>
573*b2c653efSSorin Basca<code>childrenInvoker, classBlock, classRules, filter, getName, getRunnerAnnotations, getTestClass, run, runLeaf, setScheduler, sort, validatePublicVoidNoArgMethods, withAfterClasses, withBeforeClasses</code></li>
574*b2c653efSSorin Basca</ul>
575*b2c653efSSorin Basca<ul class="blockList">
576*b2c653efSSorin Basca<li class="blockList"><a name="methods.inherited.from.class.org.junit.runner.Runner">
577*b2c653efSSorin Basca<!--   -->
578*b2c653efSSorin Basca</a>
579*b2c653efSSorin Basca<h3>Methods inherited from class&nbsp;org.junit.runner.Runner</h3>
580*b2c653efSSorin Basca<code>testCount</code></li>
581*b2c653efSSorin Basca</ul>
582*b2c653efSSorin Basca<ul class="blockList">
583*b2c653efSSorin Basca<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
584*b2c653efSSorin Basca<!--   -->
585*b2c653efSSorin Basca</a>
586*b2c653efSSorin Basca<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
587*b2c653efSSorin Basca<code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
588*b2c653efSSorin Basca</ul>
589*b2c653efSSorin Basca</li>
590*b2c653efSSorin Basca</ul>
591*b2c653efSSorin Basca</li>
592*b2c653efSSorin Basca</ul>
593*b2c653efSSorin Basca</div>
594*b2c653efSSorin Basca<div class="details">
595*b2c653efSSorin Basca<ul class="blockList">
596*b2c653efSSorin Basca<li class="blockList">
597*b2c653efSSorin Basca<!-- ========= CONSTRUCTOR DETAIL ======== -->
598*b2c653efSSorin Basca<ul class="blockList">
599*b2c653efSSorin Basca<li class="blockList"><a name="constructor.detail">
600*b2c653efSSorin Basca<!--   -->
601*b2c653efSSorin Basca</a>
602*b2c653efSSorin Basca<h3>Constructor Detail</h3>
603*b2c653efSSorin Basca<a name="JUnitParamsRunner-java.lang.Class-">
604*b2c653efSSorin Basca<!--   -->
605*b2c653efSSorin Basca</a>
606*b2c653efSSorin Basca<ul class="blockListLast">
607*b2c653efSSorin Basca<li class="blockList">
608*b2c653efSSorin Basca<h4>JUnitParamsRunner</h4>
609*b2c653efSSorin Basca<pre>public&nbsp;JUnitParamsRunner(<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;klass)
610*b2c653efSSorin Basca                  throws org.junit.runners.model.InitializationError</pre>
611*b2c653efSSorin Basca<dl>
612*b2c653efSSorin Basca<dt><span class="throwsLabel">Throws:</span></dt>
613*b2c653efSSorin Basca<dd><code>org.junit.runners.model.InitializationError</code></dd>
614*b2c653efSSorin Basca</dl>
615*b2c653efSSorin Basca</li>
616*b2c653efSSorin Basca</ul>
617*b2c653efSSorin Basca</li>
618*b2c653efSSorin Basca</ul>
619*b2c653efSSorin Basca<!-- ============ METHOD DETAIL ========== -->
620*b2c653efSSorin Basca<ul class="blockList">
621*b2c653efSSorin Basca<li class="blockList"><a name="method.detail">
622*b2c653efSSorin Basca<!--   -->
623*b2c653efSSorin Basca</a>
624*b2c653efSSorin Basca<h3>Method Detail</h3>
625*b2c653efSSorin Basca<a name="collectInitializationErrors-java.util.List-">
626*b2c653efSSorin Basca<!--   -->
627*b2c653efSSorin Basca</a>
628*b2c653efSSorin Basca<ul class="blockList">
629*b2c653efSSorin Basca<li class="blockList">
630*b2c653efSSorin Basca<h4>collectInitializationErrors</h4>
631*b2c653efSSorin Basca<pre>protected&nbsp;void&nbsp;collectInitializationErrors(<a href="http://docs.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt;&nbsp;errors)</pre>
632*b2c653efSSorin Basca<dl>
633*b2c653efSSorin Basca<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
634*b2c653efSSorin Basca<dd><code>collectInitializationErrors</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
635*b2c653efSSorin Basca</dl>
636*b2c653efSSorin Basca</li>
637*b2c653efSSorin Basca</ul>
638*b2c653efSSorin Basca<a name="runChild-org.junit.runners.model.FrameworkMethod-org.junit.runner.notification.RunNotifier-">
639*b2c653efSSorin Basca<!--   -->
640*b2c653efSSorin Basca</a>
641*b2c653efSSorin Basca<ul class="blockList">
642*b2c653efSSorin Basca<li class="blockList">
643*b2c653efSSorin Basca<h4>runChild</h4>
644*b2c653efSSorin Basca<pre>protected&nbsp;void&nbsp;runChild(org.junit.runners.model.FrameworkMethod&nbsp;method,
645*b2c653efSSorin Basca                        org.junit.runner.notification.RunNotifier&nbsp;notifier)</pre>
646*b2c653efSSorin Basca<dl>
647*b2c653efSSorin Basca<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
648*b2c653efSSorin Basca<dd><code>runChild</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
649*b2c653efSSorin Basca</dl>
650*b2c653efSSorin Basca</li>
651*b2c653efSSorin Basca</ul>
652*b2c653efSSorin Basca<a name="computeTestMethods--">
653*b2c653efSSorin Basca<!--   -->
654*b2c653efSSorin Basca</a>
655*b2c653efSSorin Basca<ul class="blockList">
656*b2c653efSSorin Basca<li class="blockList">
657*b2c653efSSorin Basca<h4>computeTestMethods</h4>
658*b2c653efSSorin Basca<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.junit.runners.model.FrameworkMethod&gt;&nbsp;computeTestMethods()</pre>
659*b2c653efSSorin Basca<dl>
660*b2c653efSSorin Basca<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
661*b2c653efSSorin Basca<dd><code>computeTestMethods</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
662*b2c653efSSorin Basca</dl>
663*b2c653efSSorin Basca</li>
664*b2c653efSSorin Basca</ul>
665*b2c653efSSorin Basca<a name="methodInvoker-org.junit.runners.model.FrameworkMethod-java.lang.Object-">
666*b2c653efSSorin Basca<!--   -->
667*b2c653efSSorin Basca</a>
668*b2c653efSSorin Basca<ul class="blockList">
669*b2c653efSSorin Basca<li class="blockList">
670*b2c653efSSorin Basca<h4>methodInvoker</h4>
671*b2c653efSSorin Basca<pre>protected&nbsp;org.junit.runners.model.Statement&nbsp;methodInvoker(org.junit.runners.model.FrameworkMethod&nbsp;method,
672*b2c653efSSorin Basca                                                          <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;test)</pre>
673*b2c653efSSorin Basca<dl>
674*b2c653efSSorin Basca<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
675*b2c653efSSorin Basca<dd><code>methodInvoker</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
676*b2c653efSSorin Basca</dl>
677*b2c653efSSorin Basca</li>
678*b2c653efSSorin Basca</ul>
679*b2c653efSSorin Basca<a name="getDescription--">
680*b2c653efSSorin Basca<!--   -->
681*b2c653efSSorin Basca</a>
682*b2c653efSSorin Basca<ul class="blockList">
683*b2c653efSSorin Basca<li class="blockList">
684*b2c653efSSorin Basca<h4>getDescription</h4>
685*b2c653efSSorin Basca<pre>public&nbsp;org.junit.runner.Description&nbsp;getDescription()</pre>
686*b2c653efSSorin Basca<dl>
687*b2c653efSSorin Basca<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
688*b2c653efSSorin Basca<dd><code>getDescription</code>&nbsp;in interface&nbsp;<code>org.junit.runner.Describable</code></dd>
689*b2c653efSSorin Basca<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
690*b2c653efSSorin Basca<dd><code>getDescription</code>&nbsp;in class&nbsp;<code>org.junit.runners.ParentRunner&lt;org.junit.runners.model.FrameworkMethod&gt;</code></dd>
691*b2c653efSSorin Basca</dl>
692*b2c653efSSorin Basca</li>
693*b2c653efSSorin Basca</ul>
694*b2c653efSSorin Basca<a name="describeMethod-org.junit.runners.model.FrameworkMethod-">
695*b2c653efSSorin Basca<!--   -->
696*b2c653efSSorin Basca</a>
697*b2c653efSSorin Basca<ul class="blockList">
698*b2c653efSSorin Basca<li class="blockList">
699*b2c653efSSorin Basca<h4>describeMethod</h4>
700*b2c653efSSorin Basca<pre>protected&nbsp;org.junit.runner.Description&nbsp;describeMethod(org.junit.runners.model.FrameworkMethod&nbsp;method)</pre>
701*b2c653efSSorin Basca</li>
702*b2c653efSSorin Basca</ul>
703*b2c653efSSorin Basca<a name="Z:Z:D-java.lang.Object...-">
704*b2c653efSSorin Basca<!--   -->
705*b2c653efSSorin Basca</a>
706*b2c653efSSorin Basca<ul class="blockListLast">
707*b2c653efSSorin Basca<li class="blockList">
708*b2c653efSSorin Basca<h4>$</h4>
709*b2c653efSSorin Basca<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;$(<a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;params)</pre>
710*b2c653efSSorin Basca<div class="block">Shortcut for returning an array of objects. All parameters passed to this
711*b2c653efSSorin Basca method are returned in an <code>Object[]</code> array.</div>
712*b2c653efSSorin Basca<dl>
713*b2c653efSSorin Basca<dt><span class="paramLabel">Parameters:</span></dt>
714*b2c653efSSorin Basca<dd><code>params</code> - Values to be returned in an <code>Object[]</code> array.</dd>
715*b2c653efSSorin Basca<dt><span class="returnLabel">Returns:</span></dt>
716*b2c653efSSorin Basca<dd>Values passed to this method.</dd>
717*b2c653efSSorin Basca</dl>
718*b2c653efSSorin Basca</li>
719*b2c653efSSorin Basca</ul>
720*b2c653efSSorin Basca</li>
721*b2c653efSSorin Basca</ul>
722*b2c653efSSorin Basca</li>
723*b2c653efSSorin Basca</ul>
724*b2c653efSSorin Basca</div>
725*b2c653efSSorin Basca</div>
726*b2c653efSSorin Basca<!-- ========= END OF CLASS DATA ========= -->
727*b2c653efSSorin Basca<!-- ======= START OF BOTTOM NAVBAR ====== -->
728*b2c653efSSorin Basca<div class="bottomNav"><a name="navbar.bottom">
729*b2c653efSSorin Basca<!--   -->
730*b2c653efSSorin Basca</a>
731*b2c653efSSorin Basca<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
732*b2c653efSSorin Basca<a name="navbar.bottom.firstrow">
733*b2c653efSSorin Basca<!--   -->
734*b2c653efSSorin Basca</a>
735*b2c653efSSorin Basca<ul class="navList" title="Navigation">
736*b2c653efSSorin Basca<li><a href="../overview-summary.html">Overview</a></li>
737*b2c653efSSorin Basca<li><a href="package-summary.html">Package</a></li>
738*b2c653efSSorin Basca<li class="navBarCell1Rev">Class</li>
739*b2c653efSSorin Basca<li><a href="class-use/JUnitParamsRunner.html">Use</a></li>
740*b2c653efSSorin Basca<li><a href="package-tree.html">Tree</a></li>
741*b2c653efSSorin Basca<li><a href="../deprecated-list.html">Deprecated</a></li>
742*b2c653efSSorin Basca<li><a href="../index-all.html">Index</a></li>
743*b2c653efSSorin Basca<li><a href="../help-doc.html">Help</a></li>
744*b2c653efSSorin Basca</ul>
745*b2c653efSSorin Basca</div>
746*b2c653efSSorin Basca<div class="subNav">
747*b2c653efSSorin Basca<ul class="navList">
748*b2c653efSSorin Basca<li><a href="../junitparams/FileParameters.html" title="annotation in junitparams"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
749*b2c653efSSorin Basca<li><a href="../junitparams/Parameters.html" title="annotation in junitparams"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
750*b2c653efSSorin Basca</ul>
751*b2c653efSSorin Basca<ul class="navList">
752*b2c653efSSorin Basca<li><a href="../index.html?junitparams/JUnitParamsRunner.html" target="_top">Frames</a></li>
753*b2c653efSSorin Basca<li><a href="JUnitParamsRunner.html" target="_top">No&nbsp;Frames</a></li>
754*b2c653efSSorin Basca</ul>
755*b2c653efSSorin Basca<ul class="navList" id="allclasses_navbar_bottom">
756*b2c653efSSorin Basca<li><a href="../allclasses-noframe.html">All&nbsp;Classes</a></li>
757*b2c653efSSorin Basca</ul>
758*b2c653efSSorin Basca<div>
759*b2c653efSSorin Basca<script type="text/javascript"><!--
760*b2c653efSSorin Basca  allClassesLink = document.getElementById("allclasses_navbar_bottom");
761*b2c653efSSorin Basca  if(window==top) {
762*b2c653efSSorin Basca    allClassesLink.style.display = "block";
763*b2c653efSSorin Basca  }
764*b2c653efSSorin Basca  else {
765*b2c653efSSorin Basca    allClassesLink.style.display = "none";
766*b2c653efSSorin Basca  }
767*b2c653efSSorin Basca  //-->
768*b2c653efSSorin Basca</script>
769*b2c653efSSorin Basca</div>
770*b2c653efSSorin Basca<div>
771*b2c653efSSorin Basca<ul class="subNavList">
772*b2c653efSSorin Basca<li>Summary:&nbsp;</li>
773*b2c653efSSorin Basca<li>Nested&nbsp;|&nbsp;</li>
774*b2c653efSSorin Basca<li>Field&nbsp;|&nbsp;</li>
775*b2c653efSSorin Basca<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
776*b2c653efSSorin Basca<li><a href="#method.summary">Method</a></li>
777*b2c653efSSorin Basca</ul>
778*b2c653efSSorin Basca<ul class="subNavList">
779*b2c653efSSorin Basca<li>Detail:&nbsp;</li>
780*b2c653efSSorin Basca<li>Field&nbsp;|&nbsp;</li>
781*b2c653efSSorin Basca<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
782*b2c653efSSorin Basca<li><a href="#method.detail">Method</a></li>
783*b2c653efSSorin Basca</ul>
784*b2c653efSSorin Basca</div>
785*b2c653efSSorin Basca<a name="skip.navbar.bottom">
786*b2c653efSSorin Basca<!--   -->
787*b2c653efSSorin Basca</a></div>
788*b2c653efSSorin Basca<!-- ======== END OF BOTTOM NAVBAR ======= -->
789*b2c653efSSorin Basca<p class="legalCopy"><small>Copyright &#169; 2014 <a href="http://pragmatists.pl">Pragmatists</a>. All rights reserved.</small></p>
790*b2c653efSSorin Basca</body>
791*b2c653efSSorin Basca</html>
792