java单元测试Fibonacci数列

之前写过一个计算Fibonacci数列的算法,很好奇计算那么多次加法会用多长时间,今天用junit测试了一下

下面给出测试代码

测试数据为第5000w个Fibonacci数与10007的余数

当编写测试方法时,经常会发现一些方法在执行前需要创建相同的对象

使用@Before注解一个public void 方法会使该方法在@Test注解方法被执行前执行(那么就可以在该方法中创建相同的对象)

父类的@Before注解方法会在子类的@Before注解方法执行前执行

如果在@Before注解方法中分配了额外的资源,那么在测试执行完后,需要释放分配的资源。

使用@After注解一个public void方法会使该方法在@Test注解方法执行后被执行

即使在@Before注解方法、@Test注解方法中抛出了异常,所有的@After注解方法依然会被执行

父类中的@After注解方法会在子类@After注解方法执行后被执行

@Test注解的public void方法将会被当做测试用例

JUnit每次都会创建一个新的测试实例,然后调用@Test注解方法

任何异常的抛出都会认为测试失败

@Test注解提供2个参数:

1,“expected”,定义测试方法应该抛出的异常,如果测试方法没有抛出异常或者抛出了一个不同的异常,测试失败

2,“timeout”,如果测试运行时间长于该定义时间,测试失败(单位为毫秒)

package POJ;

import org.junit.*;

public class TestRunner {
     int n;
    @Before
    public void  setUp() throws Exception {
        n=50000000;
    }
    @After
    public void tearDown() throws Exception {
        n=0;
    }
    @Test(timeout = 300000)
    public void test() {
        new Fibonacci(n);
    }
}

算法的代码:

public class Fibonacci {

    public Fibonacci(int n) {

        long a = 1;
        long b = 1;
        long num = 0;
        int i;
        if(n == 1 || n == 2)
        {
            System.out.println(1);
            return;
        }
        else
        {
            for(i = 3; i <= n; i++)
            {
                num = (a + b) % 10007;
                a = b;
                b = num;
//                try {
//                    Thread.sleep(1);
//                } catch (InterruptedException e) {
//                    // TODO 自动生成的 catch 块
//                    e.printStackTrace();
//                }
            }
            System.out.println(num);
        }
    }

}
时间: 2024-10-14 15:55:42

java单元测试Fibonacci数列的相关文章

蓝桥杯算法训练 java算法 Fibonacci数列

问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 55 样例输

蓝桥杯 入门训练 Fibonacci数列(Java)

@Author : qingdujun 入门训练 Fibonacci数列  : http://lx.lanqiao.org/problem.page?gpid=T4 import java.util.Scanner; /** * 蓝桥杯: 入门训练 Fibonacci数列 * @author qingdujun * */ public class Main { public static void main(String[] args) { int f1 = 1; int f2 = 1; int

Java小程序之fibonacci数列 BigInteger(高精度整型)

package com.java.learning.recursion; import java.math.*; public class MainClass { public static void main(String args[]){ for(int i = 0; i < 100; i++){ f(i+1); } } public static BigInteger f(long n){ if(n <= 2){ return new BigInteger("1");

算法笔记1——蓝桥杯-入门训练 Fibonacci数列

1.问题 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 5

UVA10334 - Ray Through Glasses(Fibonacci数列)

题目链接 题目大意:求光穿过两块玻璃的折射次数的方式数目,我也有点不懂它说什么,但是看图看明白了. 解题思路:画画折射3,4,5,发现话的规律,然后就会发现符合Fibonacci数列,f[n] = f[n - 1] + f[n - 2];但是n很大到1000,需要用大数. 代码: import java.util.*; import java.math.*; import java.io.*; public class Main { static BigInteger f[] = new Big

编程之美 2.9 斐波那契(Fibonacci)数列

编程之美 2.9 斐波那契(Fibonacci)数列 斐波那契的递归表达式如下 F(n)=F(n-1)+F(n-2) n>=2 F(1)=1 F(0)=0 书中提到了三中解决方法 第一种:直接运用递归的方法来进行求解 package org.wrh.programbeautiful; import java.util.Scanner; public class Topic2_9 { public static void main(String[] args) { Topic2_9 t=new T

java实现——009Fibonacci数列

1.循环 1 public class T009 { 2 public static void main(String[] args){ 3 System.out.println(fibonacci(3)); 4 } 5 public static long fibonacci(int n){ 6 int[] result = {0,1}; 7 if(n<2) 8 return result[n]; 9 long fibminOne=1; 10 long fibminTwo=0; 11 long

网易-Fibonacci数列

题目: Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数.给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数. 输入描述: 输入为一个正整数N(1

青蛙跳台阶(Fibonacci数列)

问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n=3时,可以从n=1直接跳到n=3,也可以从n=2直接跳到n=3,及f(3)=f(1)+f(2)=3...,所以可以使用递归,自顶向下,一步一步求解,但是仔细分析一下,如果n=10,需要求得f(9)和f(8),而f(9)=f(8)+f(7),f(8)=f(7)+f(6),可以很明显看到,求了重复的f(