<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="pl">
<head>
<!-- Generated by javadoc (1.8.0) on Mon Jul 28 12:08:59 CEST 2014 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JUnitParamsRunner (JUnitParams 1.0.3-SNAPSHOT API)</title>
<meta name="date" content="2014-07-28">
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
<script type="text/javascript" src="../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="JUnitParamsRunner (JUnitParams 1.0.3-SNAPSHOT API)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/JUnitParamsRunner.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../deprecated-list.html">Deprecated</a></li>
<li><a href="../index-all.html">Index</a></li>
<li><a href="../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../junitparams/FileParameters.html" title="annotation in junitparams"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../junitparams/Parameters.html" title="annotation in junitparams"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../index.html?junitparams/JUnitParamsRunner.html" target="_top">Frames</a></li>
<li><a href="JUnitParamsRunner.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">junitparams</div>
<h2 title="Class JUnitParamsRunner" class="title">Class JUnitParamsRunner</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<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>
<li>
<ul class="inheritance">
<li>org.junit.runner.Runner</li>
<li>
<ul class="inheritance">
<li>org.junit.runners.ParentRunner&lt;org.junit.runners.model.FrameworkMethod&gt;</li>
<li>
<ul class="inheritance">
<li>org.junit.runners.BlockJUnit4ClassRunner</li>
<li>
<ul class="inheritance">
<li>junitparams.JUnitParamsRunner</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd>org.junit.runner.Describable, org.junit.runner.manipulation.Filterable, org.junit.runner.manipulation.Sortable</dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">JUnitParamsRunner</span>
extends org.junit.runners.BlockJUnit4ClassRunner</pre>
<div class="block"><h1>JUnitParams</h1><br>
 <p>
 This is a JUnit runner for parameterised tests that don't suck. Annotate your test class with
 <code>&#064;RunWith(JUnitParamsRunner.class)</code> and place
 <code>&#064;Parameters</code> annotation on each test method which requires
 parameters. Nothing more needed - no special structure, no dirty tricks.
 </p>
 <br>
 <h2>Contents</h2> <b> <a href="#p1">1. Parameterising tests</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#a">a. Parameterising tests via values
 in annotation</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#b">b. Parameterising tests via a
 method that returns parameter values</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#c">c. Parameterising tests via
 external classes</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#d">d. Loading parameters from files</a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#d">e. Converting parameter values</a><br>
 <a href="#p2">2. Usage with Spring</a><br>
 <a href="#p3">3. Other options</a><br>
 </b><br>
 <h3 id="p1">1. Parameterising tests</h3> Parameterised tests are a great way
 to limit the amount of test code when you need to test the same code under
 different conditions. Ever tried to do it with standard JUnit tools like
 Parameterized runner or Theories? I always thought they're so awkward to use,
 that I've written this library to help all those out there who'd like to have
 a handy tool.
 
 So here we go. There are a few different ways to use JUnitParams, I will try
 to show you all of them here.
 
 <h4 id="a">a. Parameterising tests via values in annotation</h4>
 <p>
 You can parameterise your test with values defined in annotations. Just pass
 sets of test method argument values as an array of Strings, where each string
 contains the argument values separated by a comma or a pipe "|".
 
 <pre>
   &#064;Test
   &#064;Parameters({ "20, Tarzan", "0, Jane" })
   public void cartoonCharacters(int yearsInJungle, String person) {
       ...
   }
 </pre>
 
 Sometimes you may be interested in passing enum values as parameters, then
 you can just write them as Strings like this:
 
 <pre>
 &#064;Test
 &#064;Parameters({ &quot;FROM_JUNGLE&quot;, &quot;FROM_CITY&quot; })
 public void passEnumAsParam(PersonType person) {
 }
 </pre>

 <h4 id="b">b. Parameterising tests via a method that returns parameter values
 </h4>
 <p>
 Obivously passing parameters as strings is handy only for trivial situations,
 that's why for normal cases you have a method that gives you a collection of
 parameters:
 
 <pre>
   &#064;Test
   &#064;Parameters(method = "cartoonCharacters")
   public void cartoonCharacters(int yearsInJungle, String person) {
       ...
   }
   private Object[] cartoonCharacters() {
      return $(
          $(0, "Tarzan"),
          $(20, "Jane")
      );
   }
 </pre>
 
 Where <code>$(...)</code> is a static method defined in
 <code>JUnitParamsRunner</code> class, which returns its parameters as a
 <code>Object[]</code> array. Just a shortcut, so that you don't need to write the ugly <code>new Object[] {}</code> kind of stuff.

 <p>
 <code>method</code> can take more than one method name - you can pass as many
 of them as you want, separated by commas. This enables you to divide your
 test cases e.g. into categories.
 <pre>
   &#064;Test
   &#064;Parameters(method = "menCharactes, womenCharacters")
   public void cartoonCharacters(int yearsInJungle, String person) {
       ...
   }
   private Object[] menCharacters() {
      return $(
          $(20, "Tarzan"),
          $(2, "Chip"),
          $(2, "Dale")
      );
   }
   private Object[] womenCharacters() {
      return $(
          $(0, "Jane"),
          $(18, "Pocahontas")
      );
   }
 </pre>
 <p>
 The <code>method</code> argument of a <code>@Parameters</code> annotation can
 be ommited if the method that provides parameters has a the same name as the
 test, but prefixed by <code>parametersFor</code>. So our example would look
 like this:
 
 <pre>
   &#064;Test
   &#064;Parameters
   public void cartoonCharacters(int yearsInJungle, String person) {
       ...
   }
   private Object[] parametersForCartoonCharacters() {
      return $(
          $(0, "Tarzan"),
          $(20, "Jane")
      );
   }
 </pre>

 <p>
 If you don't like returning untyped values and arrays, you can equally well
 return any Iterable of concrete objects:
 
 <pre>
   &#064;Test
   &#064;Parameters
   public void cartoonCharacters(Person character) {
       ...
   }
   private List&lt;Person&gt; parametersForCartoonCharacters() {
      return Arrays.asList(
          new Person(0, "Tarzan"),
          new Person(20, "Jane")
      );
   }
 </pre>
 
 If we had more than just two Person's to make, we would get redundant,
 so JUnitParams gives you a simplified way of creating objects to be passed as
 params. You can omit the creation of the objects and just return their constructor
 argument values like this:
 
 <pre>
   &#064;Test
   &#064;Parameters
   public void cartoonCharacters(Person character) {
       ...
   }
   private List&lt;?&gt; parametersForCartoonCharacters() {
      return Arrays.asList(
          $(0, "Tarzan"),
          $(20, "Jane")
      );
   }
 </pre>
 And JUnitParams will invoke the appropriate constructor (<code>new Person(int age, String name)</code> in this case.)
 <b>If you want to use it, watch out! Automatic refactoring of constructor
 arguments won't be working here!</b>
 
 <p>
 You can also define methods that provide parameters in subclasses and use
 them in test methods defined in superclasses, as well as redefine data
 providing methods in subclasses to be used by test method defined in a
 superclass. That you can doesn't mean you should. Inheritance in tests is
 usually a code smell (readability hurts), so make sure you know what you're
 doing.
 
 <h4 id="c">c. Parameterising tests via external classes</h4>
 <p>
 For more complex cases you may want to externalise the method that provides
 parameters or use more than one method to provide parameters to a single test
 method. You can easily do that like this:
 
 <pre>
   &#064;Test
   &#064;Parameters(source = CartoonCharactersProvider.class)
   public void testReadyToLiveInJungle(int yearsInJungle, String person) {
       ...
   }
   ...
   class CartoonCharactersProvider {
      public static Object[] provideCartoonCharactersManually() {
          return $(
              $(0, "Tarzan"),
              $(20, "Jane")
          );
      }
      public static Object[] provideCartoonCharactersFromDB() {
          return cartoonsRepository.loadCharacters();
      }
   }
 </pre>
 
 All methods starting with <code>provide</code> are used as parameter
 providers.
 
 <p>
 Sometimes though you may want to use just one or few methods of some class to
 provide you parameters. This can be done as well like this:
 
 <pre>
   &#064;Test
   &#064;Parameters(source = CartoonCharactersProvider.class, method = "cinderellaCharacters,snowwhiteCharacters")
   public void testPrincesses(boolean isAPrincess, String characterName) {
       ...
   }
 </pre>

 
 <h4 id="d">d. Loading parameters from files</h4> You may be interested in
 loading parameters from a file. This is very easy if it's a CSV file with
 columns in the same order as test method parameters:
 
 <pre>
   &#064;Test
   &#064;FileParameters("cartoon-characters.csv")
   public void shouldSurviveInJungle(int yearsInJungle, String person) {
       ...
   }
 </pre>
 
 But if you want to process the data from the CSV file a bit to use it in the
 test method arguments, you
 need to use an <code>IdentityMapper</code>. Look:
 
 <pre>
   &#064;Test
   &#064;FileParameters(value = "cartoon-characters.csv", mapper = CartoonMapper.class)
   public void shouldSurviveInJungle(Person person) {
       ...
   }
   
   public class CartoonMapper extends IdentityMapper {
     &#064;Override
     public Object[] map(Reader reader) {
         Object[] map = super.map(reader);
         List&lt;Object[]&gt; result = new LinkedList&lt;Object[]&gt;();
         for (Object lineObj : map) {
             String line = (String) lineObj; // line in a format just like in the file
             result.add(new Object[] { ..... }); // some format edible by the test method
         }
         return result.toArray();
     }
 
 }
 </pre>

 A CSV files with a header are also supported with the use of <code>CsvWithHeaderMapper</code> class.
 
 You may also want to use a completely different file format, like excel or
 something. Then just parse it yourself:
 
 <pre>
   &#064;Test
   &#064;FileParameters(value = "cartoon-characters.xsl", mapper = ExcelCartoonMapper.class)
   public void shouldSurviveInJungle(Person person) {
       ...
   }
   
   public class CartoonMapper implements DataMapper {
     &#064;Override
     public Object[] map(Reader fileReader) {
         ...
     }
 }
 </pre>
 
 As you see, you don't need to open or close the file. Just read it from the
 reader and parse it the way you wish.

 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
 the classpath by prefixing the file name with <code>classpath:</code>

 <h4 id="e">e. Converting parameter values</h4>
 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
 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
 without manually converting the value in the test. This is where the converters become handy. It's enough to annotate a parameter with
 a <code>&#064;ConvertParam</code> annotation, give it a converter class and possibly some options (like date format in this case) and
 you're done. Here's an example:
 <pre>
     &#064;Test
     &#064;Parameters({ "01.12.2012, A" })
     public void convertMultipleParams(
                  &#064;ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date,
                  &#064;ConvertParam(LetterToASCIIConverter.class) int num) {

         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);

         assertEquals(2012, calendar.get(Calendar.YEAR));
         assertEquals(11, calendar.get(Calendar.MONTH));
         assertEquals(1, calendar.get(Calendar.DAY_OF_MONTH));

         assertEquals(65, num);
     }
 </pre>
 
 <h3 id="p2">2. Usage with Spring</h3>
 <p>
 You can easily use JUnitParams together with Spring. The only problem is that
 Spring's test framework is based on JUnit runners, and JUnit allows only one
 runner to be run at once. Which would normally mean that you could use only
 one of Spring or JUnitParams. Luckily we can cheat Spring a little by adding
 this to your test class:
 
 <pre>
 private TestContextManager testContextManager;
 
 &#064;Before
 public void init() throws Exception {
     this.testContextManager = new TestContextManager(getClass());
     this.testContextManager.prepareTestInstance(this);
 }
 </pre>
 
 This lets you use in your tests anything that Spring provides in its test
 framework.
 
 <h3 id="p3">3. Other options</h3> <h4>Customizing how parameter objects are
 shown in IDE</h4>
 <p>
 Tests show up in your IDE as a tree with test class name being the root, test
 methods being nodes, and parameter sets being the leaves. If you want to
 customize the way an parameter object is shown, create a <b>toString</b>
 method for it.
 <h4>Empty parameter sets</h4>
 <p>
 If you create a parameterised test, but won't give it any parameter sets, it
 will be ignored and you'll be warned about it.
 <h4>Parameterised test with no parameters</h4>
 <p>
 If for some reason you want to have a normal non-parameterised method to be
 annotated with @Parameters, then fine, you can do it. But it will be ignored
 then, since there won't be any params for it, and parameterised tests need
 parameters to execute properly (parameters are a part of test setup, right?)
 <h4>JUnit Rules</h4>
 <p>
 The runner for parameterised test is trying to keep all the @Rule's running,
 but if something doesn't work - let me know. It's pretty tricky, since the
 rules in JUnit are chained, but the chain is kind of... unstructured, so
 sometimes I need to guess how to call the next element in chain. If you have
 your own rule, make sure it has a field of type Statement which is the next
 statement in chain to call.
 <h4>Test inheritance</h4>
 <p>
 Although usually a bad idea, since it makes tests less readable, sometimes
 inheritance is the best way to remove repetitions from tests. JUnitParams is
 fine with inheritance - you can define a common test in the superclass, and
 have separate parameters provider methods in the subclasses. Also the other
 way around is ok, you can define parameter providers in superclass and have
 tests in subclasses uses them as their input.</div>
<dl>
<dt><span class="simpleTagLabel">Author:</span></dt>
<dd>Pawel Lipinski (lipinski.pawel@gmail.com)</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<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>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<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>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<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>
<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>
<div class="block">Shortcut for returning an array of objects.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<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>
</tr>
<tr id="i2" class="altColor">
<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>
<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#computeTestMethods--">computeTestMethods</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected org.junit.runner.Description</code></td>
<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>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>org.junit.runner.Description</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../junitparams/JUnitParamsRunner.html#getDescription--">getDescription</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>protected org.junit.runners.model.Statement</code></td>
<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,
             <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>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<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,
        org.junit.runner.notification.RunNotifier&nbsp;notifier)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.junit.runners.BlockJUnit4ClassRunner">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;org.junit.runners.BlockJUnit4ClassRunner</h3>
<code>createTest, describeChild, getChildren, getTestRules, methodBlock, possiblyExpectingExceptions, rules, testName, validateConstructor, validateFields, validateInstanceMethods, validateNoNonStaticInnerClass, validateOnlyOneConstructor, validateTestMethods, validateZeroArgConstructor, withAfters, withBefores, withPotentialTimeout</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.junit.runners.ParentRunner">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;org.junit.runners.ParentRunner</h3>
<code>childrenInvoker, classBlock, classRules, filter, getName, getRunnerAnnotations, getTestClass, run, runLeaf, setScheduler, sort, validatePublicVoidNoArgMethods, withAfterClasses, withBeforeClasses</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.junit.runner.Runner">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;org.junit.runner.Runner</h3>
<code>testCount</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<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>
<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>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="JUnitParamsRunner-java.lang.Class-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>JUnitParamsRunner</h4>
<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)
                  throws org.junit.runners.model.InitializationError</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.junit.runners.model.InitializationError</code></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="collectInitializationErrors-java.util.List-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>collectInitializationErrors</h4>
<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>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>collectInitializationErrors</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
</dl>
</li>
</ul>
<a name="runChild-org.junit.runners.model.FrameworkMethod-org.junit.runner.notification.RunNotifier-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>runChild</h4>
<pre>protected&nbsp;void&nbsp;runChild(org.junit.runners.model.FrameworkMethod&nbsp;method,
                        org.junit.runner.notification.RunNotifier&nbsp;notifier)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>runChild</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
</dl>
</li>
</ul>
<a name="computeTestMethods--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeTestMethods</h4>
<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>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>computeTestMethods</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
</dl>
</li>
</ul>
<a name="methodInvoker-org.junit.runners.model.FrameworkMethod-java.lang.Object-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>methodInvoker</h4>
<pre>protected&nbsp;org.junit.runners.model.Statement&nbsp;methodInvoker(org.junit.runners.model.FrameworkMethod&nbsp;method,
                                                          <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>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>methodInvoker</code>&nbsp;in class&nbsp;<code>org.junit.runners.BlockJUnit4ClassRunner</code></dd>
</dl>
</li>
</ul>
<a name="getDescription--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDescription</h4>
<pre>public&nbsp;org.junit.runner.Description&nbsp;getDescription()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>getDescription</code>&nbsp;in interface&nbsp;<code>org.junit.runner.Describable</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>getDescription</code>&nbsp;in class&nbsp;<code>org.junit.runners.ParentRunner&lt;org.junit.runners.model.FrameworkMethod&gt;</code></dd>
</dl>
</li>
</ul>
<a name="describeMethod-org.junit.runners.model.FrameworkMethod-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>describeMethod</h4>
<pre>protected&nbsp;org.junit.runner.Description&nbsp;describeMethod(org.junit.runners.model.FrameworkMethod&nbsp;method)</pre>
</li>
</ul>
<a name="Z:Z:D-java.lang.Object...-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>$</h4>
<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>
<div class="block">Shortcut for returning an array of objects. All parameters passed to this
 method are returned in an <code>Object[]</code> array.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>params</code> - Values to be returned in an <code>Object[]</code> array.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Values passed to this method.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/JUnitParamsRunner.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../deprecated-list.html">Deprecated</a></li>
<li><a href="../index-all.html">Index</a></li>
<li><a href="../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../junitparams/FileParameters.html" title="annotation in junitparams"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../junitparams/Parameters.html" title="annotation in junitparams"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../index.html?junitparams/JUnitParamsRunner.html" target="_top">Frames</a></li>
<li><a href="JUnitParamsRunner.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2014 <a href="http://pragmatists.pl">Pragmatists</a>. All rights reserved.</small></p>
</body>
</html>
