Can a JUnit testmethod have a argument?

旧街凉风 提交于 2019-12-17 18:36:04

问题


import java.util.regex.Pattern;

public class TestUI {
    private static Pattern p = Pattern.compile("^[A-Za-z0-9()+-]+$");

    public static void main(String[] args) {   
        // Test case1
        String[] str=test();

        System.out.println(str[0]+str.length);
        match("Alphanumeric(Text)");
    }

    private static String[] test() {

        boolean res;
        String[] array={"a","b","c","d","e"};
        for(int i=0;i<array.length;i++){
            System.out.println(match(array[i]));
            res=match(array[i]);
            if(res=true)
                calltomethod(array);
        }

        return array;   
    }

    private static boolean match(String s) {
        return p.matcher(s).matches();
    }

}

In the above code I need to pass the array as a argument to a JUnit method, the above code will be present in a JUnit class, can I have these kind of methods in a JUnit class and a test =method with argument?


回答1:


You should take a look at parameterized unit tests (introduced in JUnit 4).

Daniel Mayer's blog has an example of this.

Another, more simple example is on mkyong's webpage




回答2:


Yes you can with the Theories Runner in JUnit 4.4

@RunWith(Theories.class)
public class TheorieTest {

   @DataPoints
   public static String[] strings={"a","b","c","d","e"};

   private static Pattern p = Pattern.compile("^[A-Za-z0-9()+-]+$");

   @Theory
   public void stringTest(String x) {
      assertTrue("string " + x + " should match but does not", p.matcher(x).matches());

   }
 }

For more details:

  • Junit 4.4 Release Notes
  • Blog



回答3:


yes, it can. recently i started zohhak project. it lets you write:

@TestWith({
   "25 USD",
   "38 GBP",
   "null"
})
public void testMethod(Money money) {
   ...
}



回答4:


You can't directly pass parameters to test methods with JUnit. TestNG allows it, though:

//This method will provide data to any test method that declares that its Data
// Provider is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
 return new Object[][] {
   { "Cedric", new Integer(36) },
   { "Anne", new Integer(37)},
 };
}

//This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}

will print:

Cedric 36
Anne 37


来源:https://stackoverflow.com/questions/7234339/can-a-junit-testmethod-have-a-argument

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!