我正在使用Mockito,并且我正在尝试将模拟CustomFileHandler注入我的RejerciCioDodao类,以进行测试。问题是,我的测试没有例外,但没有注入我的模拟对象,原始的@Autowired customfilehandler没有被替换。这是我的代码:
@Repository
public class REjercicioDAO extends ARHibernateDAO < REjercicio > implements IREjercicioDAO {
@Autowired
public ICustomFileHandler customFileHandler;
...
}
这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ATest.CONTEXT_CONFIGURATION)
public class REjercicioDAOTest extends ATest {
@Mock private ICustomFileHandler customFileHandler;
@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;
@Before
public void before () {
MockitoAnnotations.initMocks(this);
...
}
顺便说一句,实体按预期工作,接口与实际实体正确链接,我已经对此进行了测试。我该如何解决?
这是一个没有答案。我无法付出更多,因为我真的很遗憾看到这么多人使用这种尴尬的API依靠反思,而您可以通过明确设置依赖性来为班级的读者做出很清楚的事情。
事实是,我的测试没有例外,但这并没有注入我的 模拟对象
不足为奇。即使没有注射成功,这种注入模拟的方式仍保持安静。来自InjectMocks
Javadoc(强调不是我的!(:
Mockito将尝试仅通过构造函数注入来注入模拟, 按顺序注入二阶注射或财产注入,如上所述 以下。如果以下任何策略失败,则Mockito 不会 报告失败; 即,您必须自己提供依赖项。
虽然Mockito没有报告故障,但我确实不鼓励使用此API。
关于您的实际问题,请看一下:
@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;
您用弹簧和摩擦下注释来注释字段。您是否对他们的处理顺序感到满意?这些来自两个不同的库。我不知道它永远不会起作用(运气和随机存在(,但是您真的认为它很健壮吗?
要达到您的要求,您可以写下类似的内容,以两个明确的步骤来完成事情:
- 对象实例化:嘲笑依赖关系并注入弹簧依赖性
- 关系集:模拟依赖关系和春季依赖关系
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ATest.CONTEXT_CONFIGURATION)
public class REjercicioDAOTest extends ATest {
@Mock
private ICustomFileHandler customFileHandler;
@Autowired
private IREjercicioDAO rEjercicioDAO;
@Before
public void before () {
MockitoAnnotations.initMocks(this);
// Set explicitly the fileHandler dependency
rEjercicioDAO.setFileHandler(customFileHandler);
}
}
您正在尝试将其与单位测试混合。
1(如果您使用的是Spring Boot:
@MockBean
private ICustomFileHandler customFileHandler;
@Autowired
private IREjercicioDAO rEjercicioDAO;
多数民众赞成在..
2(不使用Spring Boot:
public class TestConfig{
@Bean
@Primary
public ICustomFileHandler customFileHandler(){
return Mockito.mock(ICustomFileHandler.class);
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ATest.CONTEXT_CONFIGURATION, classes=TestConfig.class)
public class REjercicioDAOTest extends ATest {
@Autowired
private ICustomFileHandler customFileHandlerMock;
@Autowired
private IREjercicioDAO rEjercicioDAO;
模拟被注入,您可以按照您的喜欢