如何在另一个方法中为方法调用编写junit?

h9a6wy2h  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(294)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

六天前关门了。
改进这个问题

public class Account{

    public String getAcctNo(int accno){
        String cardno = getcreditCard();
        return accno + ":" + cardno;
    }

    public String creditCard(){
        Random rand = new Random();

        int one = rand.nextInt(1000);
        int two = rand.nextInt(1000);
        int three = rand.nextInt(1000);
        int four = rand.nextInt(1000);

        return one + "-" + two + "-" + three + "-" + four;
    }
}

我正在编写下面这样的单元测试,但是我认为我们应该在这种情况下不使用mock。

public class AccountDetailsTestCase {

    @Test
    public void testAccountNo() {
        Account account = mock(Account.class);

        when(account.creditCard()).thenReturn("101-102-103-104");

        assertEquals(account.creditCard(), "101-102-103-104");

        when(account.getAcctNo(10110)).thenReturn("10110:101-102-103-104");

        String expected = "10110:101-102-103-104";
        String result = account.getAcctNo(10110);

        assertEquals(expected, result);
    }
}

您能告诉我们如何为上述场景编写单元测试吗。我需要帮助为getacctno方法中的creditcard方法调用编写junit。注意:上面的代码只是一个场景,所以请告诉我如何为方法内部的方法调用编写junit。

mpgws1up

mpgws1up1#

目前你的测试没有测试你的逻辑的一行。

when(account.creditCard()).thenReturn("101-102-103-104");
assertEquals(account.creditCard(), "101-102-103-104");

在这里你基本上只是测试你的模拟作品。
你考试的这部分也是一样。

when(account.getAcctNo(10110)).thenReturn("10110:101-102-103-104");
String expected = "10110:101-102-103-104";
String result = account.getAcctNo(10110);
assertEquals(expected, result);

在测试时,您应该问问自己代码的可见行为是什么?这就是你想测试的东西。在你的例子中,我猜是字符串串联:

return accno + ":" + cardno;

这是不应该被嘲笑的部分,因为它是你想要测试的东西。
我看到的另一个问题是类设计本身。这个 accno (我想是账号吧?) cardno (卡号?) Account 应该存储在成员变量中。如果你改变主意 Account 对于这种设计,测试逻辑变得相当容易:

public class Account {

    private String accno;
    private String cardno;

    public Account(String accno, String cardno) {
        this.accno = accno;
        this.cardno = cardno;
    }

    public String getAcctNo() {
        return accno + ":" + cardno;
    }

    // getter and setter for accno and cardno
}

现在您只需传递有关 Account 通过构造函数并测试 ::getAcctNo() ```
@Test
public void testAccountNo() {

Account account = new Account("10110", "101-102-103-104");
String acctNo = account.getAcctNo();

assertEquals("10110:101-102-103-104", acctNo);

}

相关问题