我正在使用Mockito,并试图将一个Mock CustomFileHandler注入到我的Rejercciiodao类中以进行测试。问题是,我的测试没有抛出任何异常,但它没有注入我的模拟对象,原始的@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);
...
}
顺便说一句,实体按预期工作,接口正确链接到实际实体,我已经测试过了。我该如何解决这个问题?
你试图把它和单元测试结合起来。
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;
模拟被注入,你可以在测试中随意设置
这里有一个否定的答案。我不能给出更多,因为我真的很抱歉看到这么多人使用这个依赖于反射的尴尬API,而您可以通过显式设置依赖关系为类的读者做非常清楚的事情。
问题是,我的测试不会抛出任何异常,但它不会注入我的模拟对象
这并不奇怪。这种注入模拟的方式即使没有成功注入,也会保持安静。从InjectMocks
javadoc(重点不是我的!):
Mockito将尝试仅通过构造函数注入、setter注入或按顺序和如下所述的属性注入来注入模拟。如果以下任何策略失败,则Mockito不会报告失败;即您必须自己提供依赖项。
虽然Mockito不报告失败,但我真的不鼓励使用这个API。
关于你的实际问题,看看:
@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;
可以使用Spring和Mockito注释对字段进行注释。你对他们的处理顺序感到满意吗?它们来自两个不同的库。我不认为它永远不会起作用(幸运和随机存在),但你真的认为它很强大吗?
为了实现您的需求,您可以编写这样的东西,它分两个明确的步骤来完成工作:
-objects实例化:模拟依赖项并注入spring依赖项
-relationship set:在模拟依赖项和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);
}
}
我在Spring服务中使用推土机。如何使用JUnit和Mockito将注入到已测试的服务中? 我的java类(如果简化)看起来像: 使用JUnit 4 Mockito Hamcrest的测试类如下所示: 问题在于模拟的Dozer实例没有按预期映射对象——默认情况下,Mockito存根返回空或空对象。如果我从测试中删除注释,它会抛出NPE!
本文向大家介绍mockito 使用Mockito批注,包括了mockito 使用Mockito批注的使用技巧和注意事项,需要的朋友参考一下 示例 我们要测试的类是: 它的合作者是: 在我们的测试中,我们想打破依赖关系Collaborator及其错误,因此我们将模拟Collaborator。使用@Mock注释是为每个测试创建不同的模拟实例的便捷方法: Mockito将尝试按以下顺序解决依赖项注入:
我正在使用Mockito测试我的spring项目,但是似乎无法将一个模拟服务注入到另一个spring服务(bean)中。 下面是我想测试的spring服务: 下面是我要嘲弄的服务: 我的测试代码在这里: 但结果是 似乎CreateMailboxService没有得到模拟的UserInfoService而是使用了spring的autowired Bean。为什么我的不能工作?
我是新手,我想在我的课上注入上下文和网络(使用改型)。 这是我到目前为止的代码: 这是我的组件: 但是我如何在应用程序类中使用注入器,这是没有意义的
我试图在JavaSE中建立一个非常简单的weld实现。 我有扩展类: 然后,我有一个简单的类,我想注入: 最后,我想把它注入课堂: 结果是: 我希望在构造Test()时注入简单类,并调用postconstruct方法,该方法应输出预期文本。 我到底做错了什么?
我试图模拟一个公共类,但是当这样做时,Mockito抛出一个异常。 我想嘲弄的班级:https://github.com/scribejava/scribejava/blob/master/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java 测试代码: 完整堆栈跟踪: