user3428736
user3428736

Reputation: 914

JUNIT Autowired instance is always null

I am trying to write test case for the below class where everytime myConfig instance is coming as null. Is there any way to pass the autowired instance.

public class MyClass {

@Autowired
MyConfig myConfig ;

public Properties getUnAckMessage(String queueName) {
    Properties prop=new Properties() 
        URL url = new URL(StringUtils.join(myConfig.getQueueHost(),
                    myConfig.getQueueURL(),myConfig.getQueueVm(),queueName));

    return prop;            
    }

public  Properties request(String queue) {           
        return getUnAckMessage(queue);
    }
}

public class Main {

  public void method() {
  MyClass myClass=new MyClass();
  myClass.getUnAckMessage("test");
  }
 }

Test case

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {

 @MockBean
MyConfig myConfigReader;




@Test
    public void testMyClass() {      
        MyClass  propertiesExchangeManager1 = new MyClass ();
        propertiesExchangeManager1.request("test");
      } 
    }

Upvotes: 0

Views: 722

Answers (1)

Oreste Viron
Oreste Viron

Reputation: 3805

You must activate Spring for your test if you want Spring to autowire. For example:

@RunWith(SpringRunner.class)
public class Test {

    @Autowired private MyClass myClass

    @Test
    public void test() {
        ///...
    }
}

If you instantiate the class MyClass by yourself, Spring cannot inject the needed classes. You should modify your test like this:

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {

    @MockBean
    MyConfig myConfigReader;

    @Autowired
    MyClass propertiesExchangeManager1;


    @Test
    public void testMyClass() {
        propertiesExchangeManager1.request("test");
    }
}

Upvotes: 4

Related Questions