vendredi 3 avril 2020

how use real function in a test that use an autowired object in?

In my code i mock an object :

 @Mock
ElasticService elasticServiceMock;
@Autowired
ElasticConfiguration elasticConfiguration;

an i try to do a test :

@Test
public void measureChannelProcessor() throws IOException {
    when(elasticServiceMock.insert(anyString(),anyString())).thenAnswer(invocation -> {
        String index = (String) invocation.getArguments()[0];
        String message = (String) invocation.getArguments()[1];

        String requestUri = new StringBuilder()
                .append(elasticConfiguration.baseRequestBuilder(index))
                .toString();
}

when i call elasticConfiguration.baseRequestBuilder(index) i have null.

the real class of elasticConfiguration is this:

@Configuration
public class ElasticConfiguration {
@Autowired ElasticParameters elasticParameters;

public String baseRequestBuilder(String index){
    String toRet = new StringBuilder()
            .append(elasticParameters.getProtocol())
            .append("://")
            .append(elasticParameters.getHost())
            .append(":")
            .append(elasticParameters.getPort())
            .append("/")
            .append(index)
            .append("/")
            .append(elasticParameters.getType())
            .append("/")
            .toString();
    return toRet;
}

in particular i want simple real class elasticConfiguration but

@Autowired
    ElasticConfiguration elasticConfiguration;

dont work! and i have java.lang.NullPointerException.

the question is how use an object in Test?

Also if i use @Mock ElasticConfiguration elasticConfiguration;

i have same error but with debug i view that @Autowired ElasticParameters

elasticParameters; in public class ElasticConfiguration { is null.

Some tips?

Thanks

Regards

Aucun commentaire:

Enregistrer un commentaire