凊(◦˙▽˙◦) 2023-10-19 19:44 采纳率: 88%
浏览 4

做JUnit4测试,做限时测试这个,就

  1. 限时测试
    在求平方根的函数有Bug,是个死循环:
public void squareRoot(int n) ...{
for (; ;) ;                 //Bug : 死循环
}

如果测试的时候遇到死循环是令人不愉快的。因此,对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。限时测试是一个很好的解决方案。给这些测试函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。要实现这一功能,只需要给@Test标注加一个参数即可,代码如下:

@Test(timeout = 1000)
public void squareRoot() ...{
   calculator.squareRoot(4);
   assertEquals(2, calculator.getResult());
}

然后把代码放在

package andycpp;

import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

public class CalculatorTest {

    private static Calculator calculator = new Calculator();
    
    @Before
    public void setUp() throws Exception {
        calculator.clear();
    }

    @Test
    public void testAdd() {
        calculator.add(2);
        calculator.add(3);
        assertEquals(5, calculator.getResult());
    }

    @Test
    public void testSubstract() {
        calculator.add(10);
        calculator.substract(2);
        assertEquals(8, calculator.getResult());
    }

    @Ignore("Multiply() Not yet implemented")
    @Test
    public void testMultiply() {
    }

    @Test
    public void testDivide() {
        calculator.add(8);
        calculator.divide(2);
        assertEquals(4, calculator.getResult());
    }
    
    @Test(timeout = 1000)
    public void squareRoot() {
        calculator.squareRoot(4);
        assertEquals(2, calculator.getResult());
    }
    @Test(expected = ArithmeticException.class)
    public void divideByZero(){
    calculator.divide(0); 
 
   } 
}

img

为什么我这个这里就显示错误呢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-20 04:35
    关注

    【以下回答由 GPT 生成】

    答案:

    请将以下代码放入CalculatorTest类中:

    @Test(timeout = 1000)
    public void testSquareRootWithTimeout() {
        Thread thread = new Thread(new Runnable() {
            public void run() {
                calculator.squareRoot(4);
            }
        });
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        assertEquals(2, calculator.getResult());
    }
    

    这段代码创建了一个线程来调用calculator.squareRoot(4)方法,并设置了一个超时时间为1秒。如果函数在1秒内未能执行完毕,JUnit会强制终止该线程,并且会抛出一个超时异常。最后使用assertEquals来验证函数返回的结果是否符合预期。

    注意:这里的calculator是一个Calculator类的实例,需要根据实际情况进行替换。

    这样,当函数执行时间超过1秒时,线程会被终止,测试也会以超时的方式结束。

    希望这个解决方案对您有帮助!如果还有其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月19日

悬赏问题

  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊