• Junit的简单使用


    1 实验

    刚学了下利用进行Junit的单元测试,现在来记录下。

    JUnit是一个开源的Java编程语言的单元测试框架,应用Junit可以快速高效的对代码进行测试。

    现在主要利用JUnit测试如下代码,代码比较简单就不注释了,可以看出代码主要分为两个类BankAccount 和BankAccountGold

     1 public class BankAccount
     2 {
     3     String AccountNumber;
     4     String AccountName;
     5     String ID;
     6     String Password;
     7     double TotalMoney;
     8  
     9     public BankAccount(String AccountNumber, String AccountName, String ID, String Password)
    10     {
    11         this.AccountNumber = AccountNumber;
    12         this.AccountName = AccountName;
    13         this.ID = ID;
    14         this.Password = Password;      
    15     }
    16      
    17     public void Balance(String AccountNumber)
    18     {
    19             System.out.println("PLEASE FIND YOUR BALANCE INFORMATION");
    20             System.out.println("Account name:" + AccountName);
    21             System.out.println("Account number:" + AccountNumber);
    22             System.out.println("Your balance:" + TotalMoney);
    23     }
    24      
    25     public void Deposit(double AddMoney)
    26     {
    27         try
    28         {
    29             if(AddMoney < 0) throw new RuntimeException();
    30             this.TotalMoney += AddMoney;                    
    31         }
    32         catch(RuntimeException except)
    33         {
    34             System.out.println("Failed to deposite, money should be larger than 0");
    35         }       
    36         System.out.println("Deposited money succeeded, the total money is:" + TotalMoney);
    37     }
    38  
    39     public void Withdraw(double GetMoney)
    40     {        
    41         try
    42         {
    43             if(GetMoney > this.TotalMoney ) throw new RuntimeException();
    44             this.TotalMoney -= GetMoney;
    45             System.out.println("You have withdrawed money:" + GetMoney);
    46         }
    47         catch (RuntimeException except)
    48         {
    49             System.out.println("Error! you don't have enough balance");
    50         }
    51     }  
    52 }
    53  
    54 class BankAccountGold extends BankAccount
    55 {
    56     public BankAccountGold(String AccountNumber, String AccountName, String ID, String Password)
    57     {
    58         super(AccountNumber,AccountName,ID,Password);   
    59     }
    60     public void Withdraw(double GetMoney, double overdraft)
    61     {
    62         overdraft = this.TotalMoney - GetMoney;
    63         if(overdraft > 0)
    64         {
    65             this.TotalMoney = overdraft;
    66             System.out.println("Succeeded to withdraw. your balance is" + this.TotalMoney);
    67         }
    68         else if((overdraft < 0)&&(overdraft > -1000))
    69         {
    70             this.TotalMoney = overdraft + overdraft * 0.05; // The interest is 5% of the overdraft
    71             System.out.println("Succeeded to withdraw. your balance is" + this.TotalMoney);
    72         }
    73         else
    74         {
    75             System.out.println("Failed to withdraw, you can not overdraft more than 1000!");
    76         }
    77     }  
    78 }

    利用Junit写出的测试代码如下

      1 import static org.junit.Assert.*;
      2 
      3 import org.junit.AfterClass;
      4 import org.junit.Test;
      5 
      6 public class BankAccountTest {
      7 
      8     @AfterClass
      9     public static void tearDownAfterClass() throws Exception {
     10     }
     11 
     12     @Test
     13     public void BankAccount()
     14     {
     15            String AccountNumberTest = new String("1");
     16            String AccountNameTest = new String("Q");
     17            String IDTest = new String("QID");
     18            String PasswordTest = new String("123");
     19            BankAccount s = new BankAccount(AccountNumberTest, AccountNameTest, IDTest, PasswordTest);
     20            assertEquals(AccountNumberTest, s.AccountNumber);
     21            assertEquals(AccountNameTest, s.AccountName);
     22            assertEquals(IDTest, s.ID);
     23            assertEquals(PasswordTest, s.Password);
     24     }
     25     
     26     @Test
     27     public void Balance()
     28     {
     29         BankAccount s = new BankAccount("1", "Q", "QID", "123");
     30         
     31         s.Balance(s.AccountNumber);
     32     }
     33     
     34     @Test
     35     public void ExceptionDeposit() 
     36     {
     37         BankAccount s = new BankAccount("1", "Q", "QID", "123");
     38         s.Deposit(-10);
     39     }
     40     
     41     @Test
     42     public void Deposit()
     43     {
     44         BankAccount s = new BankAccount("1", "Q", "QID", "123");
     45         s.Deposit(10);
     46     }
     47     
     48     @Test
     49     public void ExceptionWithDraw()
     50     {
     51         BankAccount s = new BankAccount("1", "Q", "QID", "123");
     52         s.TotalMoney = 10;
     53         s.Withdraw(100); 
     54     }
     55     
     56     @Test
     57     public void WithDraw()
     58     {
     59         BankAccount s = new BankAccount("1", "Q", "QID", "123");
     60         s.TotalMoney = 100;
     61         s.Withdraw(10);
     62     }
     63 }
     64 
     65 import static org.junit.Assert.*;
     66 
     67 import org.junit.AfterClass;
     68 import org.junit.Test;
     69 
     70 public class BankAccountGoldTest {
     71 
     72     @AfterClass
     73     public static void tearDownAfterClass() throws Exception {
     74     }
     75 
     76     @Test
     77     public void BankAccountGold()
     78     {
     79         String AccountNumberTest = new String("1");
     80         String AccountNameTest = new String("Q");
     81         String IDTest = new String("QID");
     82         String PasswordTest = new String("123");
     83         
     84         BankAccountGold s= new BankAccountGold(AccountNumberTest, AccountNameTest, IDTest, PasswordTest);
     85         assertEquals(AccountNumberTest, s.AccountNumber);
     86         assertEquals(AccountNameTest, s.AccountName);
     87         assertEquals(IDTest, s.ID);
     88         assertEquals(PasswordTest, s.Password);
     89     }
     90     
     91     @Test
     92     public void WithDraw()
     93     {
     94         BankAccountGold s = new BankAccountGold("1", "Q", "QID", "123");
     95         s.TotalMoney = 100;
     96         s.Withdraw(10.0);
     97         s.TotalMoney = 100;
     98         s.Withdraw(150, 0);
     99         s.TotalMoney = 100;
    100         s.Withdraw(2000, 0);
    101     }
    102 }

    测试结果如下:

    2 总结&问题

      这是我第一次接触自动的单元测试的框架,感觉还是很新奇。Junit在我看来本质就是利用一些assert等的辅助语句实现对软件自动化测试的工具。刚开始还以为测试用例都可以自己生成,接触后才发现还是无法达到这么智能,需要自己进行书写测试用例,只不过把一些之前可能要利用print才能看出结果的语句,利用自动化的图表统计出来。这个实验由于java和Junit都不熟,有个问题在这里记录下,希望之后可以解决。

      在待测试代码中存在try catch语句时,如何测试代码进入到catch中。这里并不能直接利用Junit4中的expected来检测待测试进入异常。上述实验中是通过观看输出来判定是否到达这个分支,并不能实现自动测试。

  • 相关阅读:
    【转】HTML CANVAS
    【转】JY 博客
    【转发】如何使用NPM?CNPM又是什么?
    【转廖大神】package.json 包安装
    【转】Socket接收字节缓冲区
    C# 串口操作系列(5)--通讯库雏形
    C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
    C# 串口操作系列(4) -- 协议篇,文本协议数据解析
    .netCore微服务使用Nginx集中式管理实现
    nginx代理访问及上传文件异常413 Request Entity Too Large
  • 原文地址:https://www.cnblogs.com/qtalker/p/4366084.html
Copyright © 2020-2023  润新知