当前位置: 首页 > 知识库问答 >
问题:

如何为这段代码编写JUnit测试?[闭门]

夏侯腾
2023-03-14

您好,我是java新手,我对如何编写JUnit测试感到困惑,有人能帮我吗?

任务说明:

当您将自动取款机(ATM)与银行卡一起使用时,您需要使用个人识别码(PIN)来访问您的帐户。如果用户在输入PIN码时失败三次以上,机器将阻止该卡。

假设用户的PIN为“1234”,编写一个程序,要求用户输入PIN不超过三次,并执行以下操作:

  • 如果用户输入了正确的号码,请打印一条消息,说明“您的PIN是正确的”,然后结束程序
import java.util.Scanner;

public class BankingSystemWithPin {
    
    private static int pinAttempts = 0;
    
    public static void main(String[] args) {
        BankAccount bankAccount1 = new BankAccount("RO29455302311322", 200, "1234");
        BankAccount bankAccount2 = new BankAccount("RO43593530521134", 600, "7530");
        BankAccount[] bankAccounts = {bankAccount1, bankAccount2};
        Scanner scanner = new Scanner(System.in);
        BankAccount currentBankAccount = null;
        while (currentBankAccount == null) {
            pinAttempts++;
            if (pinAttempts > 3) {
                System.err.println();
                System.err.println("You have exceeded the allowable number of login attempts!");
                System.err.println("The transaction is over. ");
                System.exit(0);
            }
            Menu.welcome();
            String pin = scanner.nextLine();
            currentBankAccount = BankingSystemWithPin.getBankAccountByPin(bankAccounts, pin);
        }
        
        // PIN correct and account number acquired!
        ATM.useATM(currentBankAccount);
    }
    
    public static BankAccount getBankAccountByPin(BankAccount[] bankAccounts, String pin) {
        for (BankAccount bankAccount : bankAccounts) {
            if (bankAccount.pin.equals(pin)) {
                System.out.println();
                System.out.println("Account Number: " + bankAccount.IBAN);
                return bankAccount;
            } 
        }
        System.err.println("Wrong Pin. Try Again.");
        System.err.println();
        return null;
    }
}

共有1个答案

郎华皓
2023-03-14

只有几个指针;

  1. 将当前静态方法中的逻辑移动到类方法中--可能移动到ATM类中。静态方法是出了名的难以测试
  2. 将用户交互从pin验证逻辑中分离出来。ATM类应该有一个像validatePin(pin Number)这样的方法,它对PIN是如何获得的一无所知。
  3. 给你的ATM类一个内部计数器,当第三次调用validatePin(pin Number)失败时,该计数器会吐出假人。当三次尝试失败时,它可以引发自定义异常。

这样,至少测试ATM类应该很简单。方法。测试用户输入逻辑有点困难,通常是手动完成的。

 类似资料:
  • 你好,我是java的新手,我对如何编写JUnit测试感到困惑,有人能帮忙吗? 任务说明: 当您将自动取款机(ATM)与银行卡一起使用时,您需要使用个人识别码(PIN)来访问您的帐户。如果用户在输入PIN码时失败三次以上,机器将阻止该卡。 假设用户的PIN是“1234”,编写一个程序,向用户索要PIN不超过三次,并执行以下操作: 如果用户输入了正确的号码,请打印一条消息,说明“您的PIN是正确的”,

  • 我不知道如何为这个程序编写Junit测试。请帮忙。问题是 假设用户的PIN为“1234”,编写一个程序,要求用户输入PIN不超过三次,并执行以下操作:如果用户输入的号码正确,则打印一条消息,说明“您的PIN正确”,然后结束程序。 如果用户输入了错误的号码,请打印一条消息,说明“您的PIN不正确”,如果您请求PIN的次数少于三次,请再次请求。如果用户三次输入错误的号码,请打印一条消息,说明“您的银行

  • 我不知道如何为这个程序编写JUnit测试。请帮忙。问题是 假设用户的个人识别码是“1234”,编写一个程序,向用户索要个人识别码不超过三次,并执行以下操作:如果用户输入正确的号码,打印一条消息说“您的个人识别码是正确的”,并结束程序... 如果用户输入了错误的号码,请打印一条消息,说明“您的PIN不正确”,如果您请求PIN的次数少于三次,请再次请求。如果用户三次输入错误的号码,请打印一条消息,说明

  • 请注意,我没有访问实际的代码在一个地方,我可以张贴它。 此外,我也限于(由于不幸的原因)使用Spring 3.0.5或3.1.2。

  • 我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个? AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空 我的测试: storetest.java

  • 我正在尝试为这样的情况编写测试用例,在这个情况下,我期待的是datatruncation异常,我试图使用assert equals和比较消息来断言相同的情况,但是看起来像是比较两个字符串,有没有更好的方法来为这样的异常编写测试用例。 我正在使用JUnit5