无法模拟@Autowired对象

Kir*_*mar 2 java junit junit4 mockito powermock

我在测试用例中使用Junit4和Mockito,在下面的代码中,我试图模拟一个自动装配的对象,该对象在模拟类内抛出空指针异常,这意味着自动装配的对象未正确模拟

ContentDao.java

public class ContentDao {

  @Autowired 
  private ConfigProperties configProperties;

  public void fuction() {
  int batchSize = configProperties.getBatchSize();
}
Run Code Online (Sandbox Code Playgroud)

ConfigProperties.java

@ConfigurationProperties(ignoreUnknownFields = false, prefix = "cleanup")
public class ConfigProperties {

  private int batchSize;

  public int getBatchSize() {
    return batchSize;
  }
}
Run Code Online (Sandbox Code Playgroud)

尝试模拟ConfigProperties。

@RunWith(MockitoJUnitRunner.class)
public class ContentDaoTest{

   @InjectMocks
   private ContentDao contentDao;

   @Mock
   private ConfigProperties configProperties;

   @Test
   public void functionTest(){
      configProperties = mock(ConfigProperties.class);
      when(configProperties.getBatchSize()).thenReturn(100);
      ContentDao contentDao = new ContentDao();
      contentDao.funtion();
   }
Run Code Online (Sandbox Code Playgroud)

函数被调用,但是我在下面的行中得到了NPE。请帮助我被困在这里。

int batchSize = configProperties.getBatchSize();
Run Code Online (Sandbox Code Playgroud)

Oli*_*ien 5

如果@Mock为configProperty 设置,则不应再次进行模拟configProperties = mock(ConfigProperties.class); 。与@InjectMocks为contentDao 设置的想法相同,不应实例化新的contentDao。

@RunWith(MockitoJUnitRunner.class)
public class ContentDaoTest {

    @InjectMocks
    private ContentDao contentDao;

    @Mock
    private ConfigProperties configProperties;

    @Test
    public void functionTest() {
        Mockito.when(configProperties.getBatchSize()).thenReturn(100);
        Assertions.assertThat(contentDao.getBatchSize()).isEqualTo(100);
    }
}
Run Code Online (Sandbox Code Playgroud)