在Spring框架下写了一个东西,用到了org.springframework.core.task.TaskExecutor这个接口,用它来执行一个FutureTask实例,但编写单测的时候遇到个问题。
我按照惯常的套路编写单测:
@Resource
TaskExecutor taskExecutorReal; // 从上下文中得到的实际的TaskExecutor实现
@Mock
TaskExecutor taskExecutor = taskExecutorReal; //mock替身
@InjectMocks
MyClass myClass = new MyClassImpl (); // 我开发的类实现
在运行单测的时候遇到问题,程序停在那里不动,不报错也不返回。debug发现在futureTask.get()深处,一个判断是否执行成功的地方,程序不再执行了:
private boolean ranOrCancelled(int state) {
return (state & (RAN | CANCELLED)) != 0; // 程序就在这hold了,其中的RAN和CANCELLED都看不到值
}
对比其他使用了taskExecutor的测试,我发现不适用Mock替身的时候,测试是正常的。于是ugly的在我的MyClass中新加了一个setTaskExecutor()的方法,专门在测试的时候注入真实的taskExecutor,这样就OK了。
求教原来的单测不能执行的原因!请教更好的单测方法!
相关推荐
记得以前面试的时候,面试官问我,...我们常使用的就是 Junit 框架,说到测试,我之前一直没搞清楚,直到现在才有点头绪,不知道你们会不会遇到这种问题,在测试中若是涉及到 find 方法还好,但是涉及到修改数据的操作
接下来,文档给出了不同测试类的参考示例,例如TestNGDemo、MockitoDemo、Controller单元测试类、Service服务单元测试类以及Dubbo服务单元测试类。通过查看这些示例代码,开发者可以了解如何在实际项目中编写各种...
内容概要:参考Mockito官方API文档,实践框架每个特性。 适合人群:Mockito入门人员以及想全面熟悉Mockito特性的人员,做到了开箱即用。...使用建议:使用前安装好Maven及Java即可,推荐使用VSCode编辑。
Spring Boot项目通常使用JUnit 5,所以我们可以在测试类上使用`@RunWith(SpringRunner.class)`注解,同时使用`@SpringBootTest`注解来加载整个Spring应用上下文。然而,为了进行单元测试,我们可能只关心单个服务或...
- 激活模拟对象:在测试类的`@Before`或`@BeforeEach`方法中,使用`MockitoAnnotations.initMocks(this)`初始化模拟对象。 - 验证调用:使用`verify()`检查方法是否被正确调用,如`verify(myDependency)....
在测试类 `ItemServiceTest` 中,我们使用 `@Mock` 注解创建了一个 `ItemRepository` 的 mock 对象,并使用 `@InjectMocks` 注解创建了 `ItemServiceImpl` 的实例。`@Before` 方法用于初始化 mock 对象。这样,当...
接着,你可以创建一个TestNG测试类,使用`@Test`注解定义测试方法。Spring与TestNG的集成通常通过`@ContextConfiguration`注解来加载Spring上下文: ```java import org.springframework.test.context....
3. **测试套件**:JUnit支持组织多个测试类为一个测试套件,方便批量执行。 在"PowerMock+Mockito-junit测试套件1.6.3版本"中,开发者可以结合这三者的功能,对复杂的Java代码进行深入的测试。例如,使用PowerMock...
在使用Mockito与JUnit进行单元测试时,我们通常会创建一个测试类,包含多个测试方法。每个测试方法专注于测试一个特定的功能点,使用`@Test`注解标记。Mockito 通过 `mock()` 方法创建模拟对象,然后在测试方法中...
EasyMock和Mockito是两个广泛使用的Java模拟框架,它们可以帮助开发者在隔离环境中测试代码,避免了依赖其他组件或服务的复杂性。本文将详细介绍这两个工具的使用方法、原理和差异。 **EasyMock** EasyMock是一个...
- 使用 Mockito 来模拟依赖对象,并编写测试用例来验证类的行为。 4. **添加行为:** - 使用 `when()` 方法来设置模拟对象的行为。 - 示例:`when(mockObject.methodName()).thenReturn(value);` 5. **验证行为...
赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar; 赠送源代码:mockito-core-4.0.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-4.0.0.pom; 包含翻译后的API文档:...
将 Mockito 和 JUnit 结合使用,我们可以构建强大的单元测试方案,确保我们的代码在各种预期和非预期情况下都能正确工作。 首先,让我们深入了解一下 Mockito。Mockito 提供了模拟(mocking)和验证(verification...
测试类需要继承MockitoBasedTest,使用@Mock和@InjectMocks注解来mock对象,并编写测试方法来验证被测类的行为。 九、测试方法编写 测试方法需要使用断言来验证被测类的行为,例如使用assertEquals来验证结果的...
项目应该包含各个层次的测试类,如`DataLayerTest`、`ViewLayerTest`和`LogicLayerTest`,每个类都包含了具体的测试方法,演示了如何使用Junit、Mockito和Robolectric进行测试。通过学习和参考这些代码,你可以更好...
Mockito 是一个流行的 Java 单元测试框架,用于模拟(mock)对象,使得开发者可以在测试代码中隔离依赖,专注于测试单个组件的行为。TDD(Test-Driven Development,测试驱动开发)是它常被结合使用的一种开发模式,...
本资源包含的"Junit + Hamcrest + Mockito 单元测试 Jar包"是一个用于Java应用程序单元测试的工具集合,分别对应了三个流行的测试框架:JUnit、Hamcrest和Mockito。 JUnit是一个开源的Java单元测试框架,广泛应用于...
12. **Mockito annotations**:通过注解如`@Mock`、`@Spy`、`@Captor`等,可以在测试类上声明mock对象,使得初始化更加简洁。 13. **Argument Captors**: Argument captors(如`@Captor`)允许你捕获方法调用时的...
在这个压缩包中,包含的是两个关键工具:JUnit 4.12 和 Mockito,它们是Java开发中广泛使用的单元测试框架。 **JUnit** 是一个开源的Java单元测试框架,它的版本4.12提供了许多增强的功能,包括注解(Annotation)...
使用`@Mock`注解可以创建模拟对象,`@InjectMocks`则可以注入这些模拟对象到待测试类中,而`@Spy`可以创建部分模拟对象,保留部分真实行为。Mockito的`when(...).thenReturn(...)`、`when(...).thenThrow(...)`和`...