Junit 从另一个类模拟对象

Junit 从另一个类模拟对象,junit,mocking,Junit,Mocking,我有一个启动服务的服务类。 此服务应仅在特定时间之间启动。 所以我需要嘲笑这个,但它不起作用 我的时间课: public boolean isTimeBetween_00_06(){ return Instant.now().isBefore(Instant.now() .truncatedTo(ChronoUnit.DAYS) .plus(6,ChronoUnit.HOURS)); } 我的服务级别: start(){ if(! new MyTimeUti

我有一个启动服务的服务类。 此服务应仅在特定时间之间启动。 所以我需要嘲笑这个,但它不起作用

我的时间课:

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