当前位置: 首页 > 知识库问答 >
问题:

Springboot单元测试集@Configuration Properties动态

贡可人
2023-03-14

我有一个在命令行上运行的springboot 2应用程序。命令行参数之一是命名中带有batchNo的fileName。我正在使用命令行参数中的fileName设置我application.properties的fileName值。示例batch-1234.csv

在我的应用程序配置文件中,我像这样从applications.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");
    }
}

如何动态设置文件,以便更好地管理测试?目前我们使用相同的文件,并且必须进行大量文件复制覆盖测试文件。

我只想澄清一下,我不希望在我的Test类中创建一个新的Application ationConfig bean并设置文件并从每个单独的测试中读取相同的文件。我想在每个单独的测试开始时设置该文件名。

共有1个答案

纪鸿禧
2023-03-14

例如,您可以使用环境:

@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不起作用。

 类似资料:
  • 需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您

  • 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet

  • 我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit