I have a config class AppConfig
to receive environment variables and use them inside service MyService
// application.yml
app-config:
env-var1: ${ENV_VAR1:}
env-var2: ${ENV_VAR2:}
env-var3: ${ENV_VAR3:}
env-var4: ${ENV_VAR4:}
env-var5: ${ENV_VAR5:}
// AppConfig.java
@Data
@EnableConfigurationProperties
@ConfigurationProperties(value = "app-config")
public class AppConfig {
private String envVar1;
private String envVar2;
private String envVar3;
private String envVar4;
private String envVar5;
}
// MyService.java
@Slf4j
@Service
public class MyService {
@Autowired
AppConfig appConfig;
public void doSomething() {
log.info(appConfig.getEnvVar1());
log.info(appConfig.getEnvVar2());
// business logic controlled by appConfig.envVar1 and appConfig.envVar2
// other variables not used
}
}
Now I am writing unit test for MyService
// MyServiceTest.java
@SpringBootTest
class MyServiceTest {
@Autowired
AppConfig appConfig;
@Autowired
MyService myService;
@BeforeEach
void setUp() {
// reset override
}
@AfterEach
void tearDown() {
// reset override
}
@Test
void doSomething_envVar1() {
// override appConfig.envVar1 only
myService.doSomething()
}
@Test
void doSomething_envVar2() {
// override appConfig.envVar2 only
myService.doSomething()
}
}
How can I override only one variable inside AppConfig
in one test only (and reset it after the test)?