java—是否可以从生产代码访问junit@tempdir路径?

pu82cl6c  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(307)

考虑一个spring(boot)应用程序,每当调用它的服务时,它都会向输出文件夹生成文件。我正试图用junitjupiter测试这种功能,但我希望在测试之后丢弃生成的文件,这就是我目前尝试使用junitjupiter的原因 @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 属性设置为临时目录的绝对路径?

2ledvvac

2ledvvac1#

你可以用 ReflectionTestUtils 在这种情况下。您可以在测试方法中执行,也可以在 @Before 在单元测试中,如果您已经配置了 application.yml 从资源目录。

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

    @Autowired
    private MyService myService;

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

相关问题