Java 是否可以从生产代码访问JUnit@TempDir路径?

Java 是否可以从生产代码访问JUnit@TempDir路径?,java,spring,junit-jupiter,Java,Spring,Junit Jupiter,考虑一个Spring(Boot)应用程序,它在调用其服务时将文件生成到输出文件夹。我正试图用JUnit Jupiter测试这种功能,但我希望在测试后丢弃生成的文件,这就是我目前尝试使用@TempDir的原因。它似乎正是我想要的,但我正在努力指示我的Spring上下文将生成的文件发送到临时目录 @SpringBootTest class MyServiceTest { @TempDir protected static Path outputDirectory; @Aut

考虑一个Spring(Boot)应用程序,它在调用其服务时将文件生成到输出文件夹。我正试图用JUnit Jupiter测试这种功能,但我希望在测试后丢弃生成的文件,这就是我目前尝试使用
@TempDir
的原因。它似乎正是我想要的,但我正在努力指示我的Spring上下文将生成的文件发送到临时目录

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

    @Autowired
    private MyService myService;

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

@服务
公共类MyService{
@值(${myservice.output directory}”)
私有字符串输出目录;
public void generateOutputFiles(){
// ...
}
}
MyServiceTest.java

@SpringBootTest
类MyServiceTest{
@坦普迪尔
受保护的静态路径输出目录;
@自动连线
私人MyService-MyService;
@试验
void test1(){
// ...
}
}

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

对于这种情况,您可以使用
ReflectionTestUtils
。您可以在单元测试中的test method或
@Before
中执行,如果您已经从参考资料目录中的
application.yml
配置了任何值,则此操作将覆盖

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

    @Autowired
    private MyService myService;

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

此测试应该是单元测试,而不是集成测试。您应该使用构造函数注入,而不是字段注入。完成后,测试服务所需做的就是使用
newmyservice(outputDirectory)
构造一个实例。