【问题标题】:@InjectMocks and non-mocked objects (Spring Data Repositories)@InjectMocks 和非模拟对象(Spring 数据存储库)
【发布时间】:2013-12-19 09:24:33
【问题描述】:

有没有办法用@InjectMocks 注入非模拟对象?

我的设置有一个 UserSignupService 依赖于一个 MailService 和一个 UserRepository(一个 Spring 数据存储库)。我有一个创建MailService 的间谍的单元测试,我用@InjectMocks 注释了UserSignupService。遗憾的是,这不会将UserRepository(非模拟)注入服务类。 将@InjectMocks@Autowired 结合不会注入模拟的MailService,而是来自应用程序上下文的bean。

MockitoAnnotations.initMocks()AbstractServiceTest.setUp() 中运行。该类还保存了单元测试的配置(SpringJunit4TestRunner等)

public class UserSignupServiceTest extends AbstractServiceTest {

  @Autowired @Spy
  private MailService<UserActivationMail> mailService;

  @InjectMocks
  private UserSignupServiceImpl service;

  @Before
  public void setUp() throws Exception {
    super.setUp();
  }
}

@Service
public class UserSignupServiceImpl implements UserSignupService {

  private final UserRepository repository;
  private final MailService<UserActivationMail> mailService;

  @Autowired
  public UserSignupServiceImpl(UserRepository repository,
                               MailService<UserActivationMail> mailService) {
    this.repository = repository;
    this.mailService = mailService;
  }
  //methods...
}

【问题讨论】:

  • 您是否尝试在带有 Autowired 和 Spy 注释的 UserRepository 的测试类中设置一个字段?
  • 是的,这确实有效,但我不想在测试中声明每个依赖项。

标签: java spring unit-testing mockito spring-data


【解决方案1】:

你需要初始化你的 Mockito MockitoAnnotations.initMocks(this);

这是我拥有的示例 Spring JUnit 测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:config/spring-context.xml" })
public class SpringKPTest {

    @Autowired
    SomeClassA SomeClassA;

    @Mock
    SomeClassB SomeClassB;



    @Before
    public void init(){
        MockitoAnnotations.initMocks(this);
    }
}

【讨论】:

  • 实际上,如果你有'@RunWith(SpringJUnit4ClassRunner.class)' 注释,你不必添加 MockitoAnnotations.initMocks(this);初始化您的代码,请检查stackoverflow.com/questions/10806345/…
  • 如前所述,我已经这样做了。基本设置很好,可以按应有的方式工作。 MailService 被 Mockito 监视。这是关于如何从应用程序上下文中获取非模拟对象以注入@InjectMocks。
猜你喜欢
  • 2017-04-30
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多