是否可以从生产代码访问 JUnit @TempDir-path?
Is it possible to access the JUnit @TempDir-path from production code?
考虑一个 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
属性 设置为临时目录的绝对路径?
对于这些情况,您可以使用 ReflectionTestUtils
。您可以在测试方法中执行,也可以在单元测试中的 @Before
中执行,如果您已经从资源目录配置了 application.yml
中的任何值,这将覆盖。
@SpringBootTest
class MyServiceTest {
@TempDir
protected static Path outputDirectory;
@Autowired
private MyService myService;
@Test
void test1() {
ReflectionTestUtils.setField(myService, "outputDirectory", outputDirectory);
}
}
考虑一个 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
属性 设置为临时目录的绝对路径?
对于这些情况,您可以使用 ReflectionTestUtils
。您可以在测试方法中执行,也可以在单元测试中的 @Before
中执行,如果您已经从资源目录配置了 application.yml
中的任何值,这将覆盖。
@SpringBootTest
class MyServiceTest {
@TempDir
protected static Path outputDirectory;
@Autowired
private MyService myService;
@Test
void test1() {
ReflectionTestUtils.setField(myService, "outputDirectory", outputDirectory);
}
}