2017-08-01 6 views
1

Je crée un test qui prend ses données d'une source externe, dans mon cas un fichier json. J'utilise JUnit Parameterized pour l'injection de données dans les champs correspondants.JUnit Injection de données paramétrée

@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(); 

    ... 
} 

Pour le moment j'utilise un chemin statique vers la source externe dans la méthode params(). Comment puis-je utiliser un chemin relatif à cette source externe et ne pas l'avoir codé en dur? Le fichier json est à côté du test-spring.xml

Mon problème ici est que la méthode params() est statique et ne peut pas injecter quelque chose à Spring pour le résoudre.

Comment puis-je résoudre ce problème?

+0

MyTest.class.getClassLoader(). getResourceAsStream ("chemin par rapport à src/test/ressources") Cela renvoie un InputStream, mais FileReader isA InputStreamReader , vous devriez donc pouvoir l'utiliser. – gmaslowski

Répondre

0

Je vois que test-spring.xml est à la racine de votre classpath, donc si le fichier JSON est aussi, alors vous pouvez obtenir poignée de fichiers comme celui-ci ...

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

Vous pouvez également jeter un oeil à ClassRelativeResourceLoader si vous voulez garder le fichier JSON à côté de votre classe de test