java - 如何从 Java 代码中删除重复项?

标签 java automated-tests

我编写了一个测试,将运行斐波那契递归 40 并运行内存递归斐波那契 40,并比较时间至少有一个数量级的差异。这是我到目前为止得到的:

      @Test
  void MemoizedMagnitudeDifferentFromRecursion(){
    Fibonacci simpleRecursiveFibonacci = new SimpleRecursiveFibonacci();
    Fibonacci memoizedRecursiveFibonacci = new MemoizedRecursiveFibonacci();
    int n = 40;

    long recursionStartTime = System.nanoTime();
    simpleRecursiveFibonacci.fibonacci(n);
    long recursionTime = System.nanoTime() - recursionStartTime;

//The code below does the same as the code above, how can I remove duplicated code?
    long memoizedStartTime = System.nanoTime();
    memoizedRecursiveFibonacci.fibonacci(n);
    long memoizedTime = System.nanoTime() - memoizedStartTime;

    assertTrue(recursionTime/memoizedTime > 1);
  }

最佳答案

将逻辑提取到函数中,并将要作为 Runnable 运行的逻辑传递。让函数运行传入的逻辑片段并返回运行它所花费的时间。

private long execute(Runnable runnable) {
    long startTime = System.nanoTime();
    runnable.run();
    return System.nanoTime() - startTime;
}

称其为

long recursionTime = execute(() -> simpleRecursiveFibonacci.fibonacci(n));
long memoizedTime = execute(() -> memoizedRecursiveFibonacci.fibonacci(n));
assertTrue(recursionTime/memoizedTime > 1);
<小时/>

还有一个选项(按照 SystemGlitch@ 的建议)是传递一个 Fibonacci 实例和一个 int 并在方法内调用 fibonacci。

private long execute(Fibonacci fibonacciInstance, int n) {        
    long startTime = System.nanoTime();
    fibonacciInstance.fibonacci(n);
    return System.nanoTime() - startTime;
}

称其为

long recursionTime = execute(simpleRecursiveFibonacci, n);
long memoizedTime = execute(memoizedRecursiveFibonacci, n);
assertTrue(recursionTime/memoizedTime > 1);

关于java - 如何从 Java 代码中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067475/

相关文章:

java - WSO2:点对点消息传递

java - 如何使用 java 将参数传递给 shell 脚本?

java - <c :foreach jsp iterate over list

javascript - XCode Instruments 在自动脚本中导出数据

javascript - 如何使用 selenium 驱动程序调整表中的列宽

javascript - nightwatchjs - 如何检测隐藏的 html 元素?

node.js - 从 ClientFunction 中访问全局变量

java - 如何向所有登录用户发送通知

java - 检查正在运行的 JAR Linux 服务的版本

c# - 如何在 PhantomDriver( headless 浏览器)中没有 findElement 函数错误的情况下隐藏 FirefoxDriver(使用 Selenium)?