1

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

我的服务.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属性设置为临时目录的绝对路径?

4

1 回答 1

2

您可以ReflectionTestUtils用于这些情况。您可以在测试方法或单元测试中执行此操作,如果您已经从资源目录@Before配置了任何值,这将覆盖。application.yml

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

    @Autowired
    private MyService myService;

    @Test
    void test1() {
        ReflectionTestUtils.setField(myService, "outputDirectory", outputDirectory);
    }
}
于 2019-11-15T21:06:56.047 回答