Набор тестовых модулей Springboot @Configuration Properties динамически - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть приложение springboot 2, которое запускается из командной строки. Одним из аргументов командной строки является fileName с именем batchNo в именовании. Я устанавливаю свое значение fileName application.properties с помощью fileName из командной строки arg. Пример batch-1234.csv

В моем файле ApplicationConfig я читаю имя файла из файла application.properties следующим образом.

@ToString
@Setter
@Getter
@Configuration
@ConfigurationProperties(prefix = "hri")
public class ApplicationConfig {

    @Value("${company.file}")
    private String file;

    public String getBatchNo() {
        return parseBatchNo(file);
    }

    public String getHomecareDetailPath() {
        return filePathProvider.getFilePath("batch-" + getBatchNo() + ".csv");
    }

    private static String parseBatchNo(String file) {
        if (batchNo == null) {
            batchNo = file.substring((file.lastIndexOf("-") + 1), (file.length() - 4));
        }
        return batchNo;
    }
}

Моя цель - иметь возможность динамически устанавливать это имя файла для каждого отдельного теста.

Пример

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AdapLoadApplication.class)
@AutoConfigureTestDatabase
public class CorporateServiceTest {

    @Autowired
    private ApplicationConfig config; 

    @Test
    public void convertCsvToBean() throws IOException {
        //Set file
        config.setFile("batch-9999.csv);
    }

    @Test
    //Is there an annotation to set the Application.properties file for each test?
    public void test2() throws IOException {
        //Set file
        config.setFile("batch-8888.csv);
    }
}

Как я могу динамически настроить файл, чтобы лучше управлять тестом? В настоящее время мы используем один и тот же файл и много копируем файл, перезаписывая тестовый файл.

Я просто хотел бы уточнить, я не собираюсь просто создавать новый компонент ApplicationConfig в моем классе Test, а также устанавливать файл и читать один и тот же файл из каждого отдельного теста. Я хотел бы установить это имя файла в начале каждого отдельного теста.

1 Ответ

0 голосов
/ 07 ноября 2018

Например, вы можете использовать Environment:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AdapLoadApplication.class)
@AutoConfigureTestDatabase
public class CorporateServiceTest {

    @Autowired
    private ApplicationConfig config;

    @Resource
    private Environment env;

    @Test
    public void convertCsvToBean() throws IOException {
        //Set file
        config.setFile(env.getProperty("first_test_company.file"));
    }

    @Test
    //Is there an annotation to set the Application.properties file for each test?
    public void test2() throws IOException {
        //Set file
        config.setFile(env.getProperty("second_test_company.file"));
    }
}

Вы должны использовать @Resource, потому что @Autowired в этом случае не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...