Reputation: 508
I have a class that Autowires another class with @ConfigurationProperties.
@ConfigurationProperties(prefix = "report")
public class SomeProperties {
private String property1;
private String property2;
...
@Service
@Transactional
public class SomeService {
....
@Autowired
private SomeProperties someProperties;
.... // There are other things
Now, I want to test SomeService class and in my test class when I mock SomeProperties class, I am getting null
value for all the properties.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SomeProperties.class)
@ActiveProfiles("test")
@EnableConfigurationProperties
public class SomeServiceTest {
@InjectMocks
private SomeService someService;
@Mock // I tried @MockBean as well, it did not work
private SomeProperties someProperties;
How can I mock SomeProperties having properties from application-test.properties
file.
Upvotes: 5
Views: 14940
Reputation: 5826
You are not mocking SomeProperties if you intend to bind values from a properties file, in which case an actual instance of SomeProperties would be provided.
Mock:
@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
@InjectMocks
private SomeService someService;
@Mock
private SomeProperties someProperties;
@Test
public void foo() {
// you need to provide a return behavior whenever someProperties methods/props are invoked in someService
when(someProperties.getProperty1()).thenReturn(...)
}
No Mock (someProperties
is an real object that binds its values from some propertysource):
@RunWith(SpringRunner.class)
@EnableConfigurationProperties(SomeConfig.class)
@TestPropertySource("classpath:application-test.properties")
public class SomeServiceTest {
private SomeService someService;
@Autowired
private SomeProperties someProperties;
@Before
public void setup() {
someService = new someService(someProperties); // Constructor Injection
}
...
Upvotes: 3
Reputation: 659
You need to stub all the property values in @Test/@Before methods of SomeServiceTest.java like :
ReflectionTestUtils.setField(someProperties, "property1", "value1");
ReflectionTestUtils.setField(object, name, value);
You can also mock the reponse for dependent classes via Mockito.when()
Upvotes: 3
Reputation: 777
If you are using @Mock , you need to stub the values as well. By default the value will be null for all the properties.
Upvotes: 1