JUnit参数化数据注入

JUnit Parameterized data injection

我正在创建一个测试,它从外部源获取数据,在我的例子中是 json 文件。我正在使用 JUnit Parameterized 在相应字段中进行数据注入。

@RunWith(Parameterized.class)
public class MyTest extends CommonTest
{   
    @Parameterized.Parameter
    public String field1;
    @Parameterized.Parameter(1)
    public String field2;

    public static Collection<Object[]> params() throws PropertyNotFoundException 
    {    
        final JsonReader reader = new JsonReader(new FileReader("path to the json file"));
        // here I am reading the tests sampledata from the json file
    }    
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-spring.xml"})
@ActiveProfiles(resolver = SpringActiveProfileResolver.class)
public class CommonTest
{
    @ClassRule
    public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();

    @Rule
    public final SpringMethodRule springMethodRule = new SpringMethodRule();

    ...
}

目前我在 params() 方法中使用到外部源的静态路径。如何使用此外部源的相对路径而不对其进行硬编码? json 文件在 test-spring.xml

旁边

我这里的问题是params()方法是静态的,不能通过Spring注入东西来解决

我该如何解决这个问题?

我看到 test-spring.xml 在你的 class 路径的根目录下,所以如果 json 文件也是,那么你可以像这样获得文件句柄...

Resource resource = new ClassPathResource("/file.json");
File file = resource.getFile();

如果您想将 json 文件放在您的测试旁边,您可能还想看看 ClassRelativeResourceLoader class