I have a simple bean
public class MyBean {
@Value("${propItem}")
private boolean propItem;
public String someMethod() {
if (propItem) {
return "XX";
} else {
return "XY";
}
}
}
I have a properties file in src/test/resources
called application-test.yml
which has one property
propItem: true
If I run my test below - I expect it to pass, but it fails because propItem
is always false
@SpringBootTest
public class MyBeanTest {
public void testFunc() {
assertTrue(new MyBean().someMethod().equals("XX"); // Fails because it's "XY"
}
}
Why is this a problem? I thought Spring does all these automatically, but seems not
CodePudding user response:
You are instantiating mybean manually, this way the property will not be injected. You need to get the bean from the context.
CodePudding user response:
You need to:
- define
MyBean
as a bean by adding an stereotype annotation:@Component
,@Configuration
or@Service
- define an active profile on your test class:
@ActiveProfile("test")
Your class should looks like this:
@Component
public class MyBean {
@Value("${propItem}")
private boolean propItem;
public String someMethod() {
if (propItem) {
return "XX";
} else {
return "XY";
}
}
}
Your test class:
@SpringBootTest
@ActiveProfile("test")
public class MyBeanTest {
@Autowired
private MyBean myBean;
@Test
public void testFunc() {
assertTrue(myBean.someMethod().equals("XX")); // Fails because it's "XY"
}
}