java - 无法模拟@Autowired 对象

标签 java junit mockito junit4 powermock

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

ContentDao.java

public class ContentDao {

  @Autowired 
  private ConfigProperties configProperties;

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

配置属性.java

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

  private int batchSize;

  public int getBatchSize() {
    return batchSize;
  }
}

尝试模拟 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();
   }

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

int batchSize = configProperties.getBatchSize();

最佳答案

如果你为configProperties设置了@Mock,你不应该再mock configProperties = mock(ConfigProperties.class); 同样的道理,当你为 contentDao 设置 @InjectMocks 时,你不应该实例化一个新的 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);
    }
}

关于java - 无法模拟@Autowired 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45237887/

相关文章:

junit - 我们是否有任何经验法则来估算 JUnit 测试用例的工时

java - Spring MVC 响应中中文字符显示不正确

java - jdbc中的加锁、处理和释放锁

java - DAO 层上的 Junit 测试为 postgresql exists() 查询返回错误结果

java - JUnit 测试方法失败

java - Mockito 非 stub 函数

java - SimpleGraph PowerPoint 模块无法按预期工作

java - 如何解决使用Mockito.any()时的困惑?

java - JUnit 断言ArrayEquals

java - 模拟接口(interface)存储库