gpt4 book ai didi

java - Mockito 无法注入(inject)模拟

转载 作者:行者123 更新时间:2023-11-29 07:24:27 31 4
gpt4 key购买 nike

我正在使用 Mockito 并尝试将 Mock CustomFileHandler 注入(inject)我的 REjercicioDAO 类以进行测试。问题是,我的测试没有抛出异常,但它没有注入(inject)我的模拟对象,原始的 @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);

...

}

顺便说一句,实体按预期工作,接口(interface)正确链接到实际实体,我已经测试过了。我该如何解决这个问题?

最佳答案

这是一个否定的答案。我不能提供更多,因为我真的很遗憾看到这么多人使用这个依赖反射的尴尬 API,而你可以通过显式设置依赖关系来为类的读者做一些非常清楚的事情。

The thing is, my test throws no exceptions, but it doesn't inject my mock object

不足为奇。即使没有注入(inject)成功,这种注入(inject)模拟的方式也会保持安静。 From the InjectMocks javadoc (重点不是我的!):

Mockito will try to inject mocks only either by constructor injection, setter injection, or property injection in order and as described below. If any of the following strategy fail, then Mockito won't report failure; i.e. you will have to provide dependencies yourself.

虽然 Mockito 不会报告失败,但我真的不鼓励使用这个 API。

关于您的实际问题,请查看:

@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;

您使用 Spring 和 Mockito 注释对字段进行注释。您对他们的处理顺序感到满意吗?这些来自两个不同的库。我没有说它永远不会起作用(存在运气和随机性),但您真的认为它很可靠吗?

为了达到您的要求,您可以编写类似的东西,分两个明确的步骤来完成:
- 对象实例化:模拟依赖并注入(inject) spring 依赖
- 关系集:在 mock 依赖和 spring 依赖之间

@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);
}
}

关于java - Mockito 无法注入(inject)模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940679/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com