junit - 模拟来自另一个类的对象
问题描述
我有一个启动服务的服务类。此服务应仅在特定时间之间启动。所以我需要模拟这个,但它不起作用。
我的时间课:
public boolean isTimeBetween_00_06(){
return Instant.now().isBefore(Instant.now()
.truncatedTo(ChronoUnit.DAYS)
.plus(6,ChronoUnit.HOURS));
}
我的服务类:
start(){
if(! new MyTimeUtils().isTimeBetween_00_06){
throw new Exception;
}
}
我的测试课:
@InjectMocks
private MyServiceClass service;
@Mock
private MyTimeUtils myTimeUtils;
@Test
myTest(){
Mockito.when(myTimeUtils.isCurrentTimeBetween_00_06()).thenReturn(true);
service.start();
}
我希望我得到正确的断言,但它会随着 Exption 停止。
我也尝试过 PowerMockito,但它仍然没有用。
有人有想法吗?
此致。
解决方案
您应该在方法中注入MyTimeUtils
而不是创建实例。不要忘记@RunWith(MockitoJUnitRunner.class)
;
请看一下代码:
public class MyServiceClass {
private final MyTimeUtils myTimeUtils;
public MyServiceClass(MyTimeUtils myTimeUtils) {
this.myTimeUtils = myTimeUtils;
}
public void start() {
if (!myTimeUtils.isTimeBetween_00_06()) {
throw new IllegalStateException("ERROR");
}
}
}
@RunWith(MockitoJUnitRunner.class)
public class MyServiceClassTest {
@InjectMocks
private MyServiceClass service;
@Mock
private MyTimeUtils myTimeUtils;
@Test
public void myTest(){
Mockito.when(myTimeUtils.isTimeBetween_00_06()).thenReturn(true);
service.start();
}
}
推荐阅读
- jquery - 在 Javascript 中编码 GET 值
- elasticsearch - ElasticSearch RestHighLevelClient 提供不准确的结果
- reactjs - 使用 spfx 在 unorderlist 列表中显示 sharepoint 列表项
- python - Python Redis - 未设置 RuntimeError pubsub 连接
- sql - 使用一个 SQL 查询设置多个变量,该查询使用 SELECT TOP 返回一行
- python - 在 pyhive 上设置执行配置
- html - 在 div 上完美对齐 INPUT
- r - 从具有不同类型电话号码的列中排除特定国家/地区的电话号码
- android - nativescript - 运行 tns 运行 android 时出现 gradle 错误
- python - 关于抓取,如何防止在 for 循环中创建空白列表?