Java 无法模拟@Autowired对象

Java 无法模拟@Autowired对象,java,junit,mockito,junit4,powermock,Java,Junit,Mockito,Junit4,Powermock,我在测试用例中使用Junit4和Mockito,在下面的代码中,我试图模拟一个自动连线对象,该对象在模拟类中抛出空指针异常,这意味着自动连线对象没有正确模拟 ContentDao.java public class ContentDao { @Autowired private ConfigProperties configProperties; public void fuction() { int batchSize = configProperties.getBatc

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

ContentDao.java

public class ContentDao {

  @Autowired 
  private ConfigProperties configProperties;

  public void fuction() {
  int batchSize = configProperties.getBatchSize();
}
ConfigProperties.java

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

  private int batchSize;

  public int getBatchSize() {
    return batchSize;
  }
}
正在尝试模拟配置属性

@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();
   }
函数被调用,但我在下面的行中得到NPE。请帮帮我,我被困在这里了

int batchSize = configProperties.getBatchSize();

如果为configProperties设置了
@Mock
,则不应再次模拟
configProperties=Mock(configProperties.class)
同样,在为contentDao设置
@injectmock
时,不应该实例化新的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);
    }
}

当然,您将使用一个
空指针
。。。您正在使用
new ContentDao()
销毁具有模拟引用的实例。您需要将mock或属性注入ContentDao类中。好的,你已经做到了。尝试将@mock ConfigProperties移到@injectMocksTry上方,以在autowired中声明“private MockMvc MockMvc;”。@M.Deinum:那么我应该删除“new ContentDao()”并从注入的“ContentDao”调用函数吗?您认为
@InjectMocks
有什么作用。。。这会给你一个例子。