为了账号安全,请及时绑定邮箱和手机立即绑定

Java 电源模拟单元测试具有 Thread.Sleep 的方法

Java 电源模拟单元测试具有 Thread.Sleep 的方法

侃侃尔雅 2023-10-13 15:22:34
我正在尝试对调用 Thread.sleep 的方法进行单元测试。public Boolean waitForUpscale(){   String res = someObject.upTheResources();   Thread.sleep(20000);   Boolean status = someObject.checkForStatus();   return status;}在测试这个时,测试也会休眠,因为Thread.sleep我必须在测试时避免测试休眠。更新:我添加了这个测试:@Test    public void downscaleTest() throws Exception {        when(someservice.downScaleResources()).thenReturn("DONE");        PowerMockito.mockStatic(Thread.class);        doNothing().when(Thread.class, "sleep", anyLong());        Boolean res = Whitebox.invokeMethod(myController, "downscaleALL");        assertTrue(res);    }当我调试它时它有效。但是当我正常运行测试时,它失败并给出以下异常:0 matchers expected, 1 recorded:-> at com.mypackage.controller.MyController.downscaleALL(MyControllerTest.java:265)This exception may occur if matchers are combined with raw values:    //incorrect:    someMethod(anyObject(), "raw String");When using matchers, all arguments have to be provided by matchers.For example:    //correct:    someMethod(anyObject(), eq("String by matcher"));For more info see javadoc for Matchers class.添加 downScaleAll 方法private Boolean downscaleALL() {    try {        String downScaleResources = someservice.downScaleResources();        if (downScaleResources.equals("DONE")) {            Thread.sleep(20000); // 20s            log.info("DOWNSCALING THE RESOURCES NOW");            return true;        }        return false;    } catch (Exception e) {        log.error("Error while downscaling the resources");        log.error(e.toString());        return false;    }}
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

您应该只模拟您拥有的类型,因此,如果您想模拟对 的调用Thread.sleep(),您应该将其提取到您拥有的类型(例如ThreadSleeper)中,因此可以模拟。更好的是,如果可以的话,重写以避免睡眠。睡眠通常是一种代码气味(偷工减料)。



查看完整回答
反对 回复 2023-10-13
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

你不应该嘲笑你不拥有的类型。但如果你还必须这样做,你可以这样做


@RunWith(PowerMockRunner.class)

@PrepareForTest({<ClassWherewaitForUpscaleFunctionisLocated>.class, Thread.class})

public class Mytest {

    @Test

    public void testStaticVoid() throws Exception {


        PowerMockito.mockStatic(Thread.class);

        doNothing().when(Thread.class, "sleep", anyLong());

        .........

    }

}


查看完整回答
反对 回复 2023-10-13
  • 2 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信