JUnit test with dynamic number of tests

前端 未结 7 622
灰色年华
灰色年华 2020-11-30 18:42

In our project I have several JUnit tests that e.g. take every file from a directory and run a test on it. If I implement a testEveryFileInDirectory method in t

相关标签:
7条回答
  • 2020-11-30 19:23

    You could consider using JUnitParams library, so you would have a few more (cleaner) options:

    @org.junit.runner.RunWith(junitparams.JUnitParamsRunner.class)
    public class ParameterizedTest {
    
        @org.junit.Test
        @junitparams.Parameters(method = "data")
        public void test1(File file) throws Exception {  }
    
        @org.junit.Test
        @junitparams.Parameters(method = "data")
        public void test2(File file) throws Exception {  }
    
        public static File[] data() {
            return new File[] { new File("path1"), new File("path2") };
        }
    }
    

    @org.junit.runner.RunWith(junitparams.JUnitParamsRunner.class)
    public class ParameterizedTest {
    
        @org.junit.Test
        @junitparams.Parameters(value = { "path1", "path2" })
        public void test1(String path) throws Exception {
            File file = new File(path);
        }
    
        @org.junit.Test
        @junitparams.Parameters(value = { "path1", "path2" })
        public void test2(String path) throws Exception {
            File file = new File(path);
        }
    }
    

    You can see more samples of usage here.

    In addition about JUnitParams, why writting parameterized tests with it is easier and more readable:

    JUnitParams project adds a new runner to JUnit and provides much easier and readable parametrised tests for JUnit >=4.6.

    Main differences to standard JUnit Parametrised runner:

    • more explicit - params are in test method params, not class fields
    • less code - you don't need a constructor to set up parameters
    • you can mix parametrised with non-parametrised methods in one class
    • params can be passed as a CSV string or from a parameters provider class
    • parameters provider class can have as many parameters providing methods as you want, so that you can group different cases
    • you can have a test method that provides parameters (no external classes or statics anymore)
    • you can see actual parameter values in your IDE (in JUnit's Parametrised it's only consecutive numbers of parameters)
    0 讨论(0)
提交回复
热议问题