是否可以从生产代码访问JUnit @ TempDir-path?

时间:2019-11-15 20:56:57

标签: java spring junit-jupiter

考虑一个Spring(启动)应用程序,该服务在调用服务时会在输出文件夹中生成文件。我正在尝试使用JUnit Jupiter来测试这种功能,但是我希望在测试后将生成的文件丢弃,这就是为什么我目前正在尝试使用@TempDir的原因。它似乎确实可以满足我的要求,但是我正在努力指示Spring上下文将生成的文件发送到临时目录。

MyService.java

@Service
public class MyService {

    @Value("${myservice.output-directory}")
    private String outputDirectory;

    public void generateOutputFiles() {
        // ...
    }
}

MyServiceTest.java

@SpringBootTest
class MyServiceTest {
    @TempDir
    protected static Path outputDirectory;

    @Autowired
    private MyService myService;

    @Test
    void test1() {
        // ...
    }
}

因此,我的问题是,是否有一种干净的方法将myservice.output-directory属性设置为临时目录的绝对路径?

1 个答案:

答案 0 :(得分:1)

对于这种情况,您可以使用ReflectionTestUtils。您可以在测试方法中进行操作,也可以在单元测试中的@Before中进行操作,如果您已经从资源目录中的application.yml中配置了任何值,则将覆盖该值。

@SpringBootTest
class MyServiceTest {
    @TempDir
    protected static Path outputDirectory;

    @Autowired
    private MyService myService;

    @Test
    void test1() {
        ReflectionTestUtils.setField(myService, "outputDirectory", outputDirectory);
    }
}