测试toString Junit

时间:2011-04-16 21:39:33

标签: java testing junit

给定一个toString方法:

public String toString()
{
    String accountString;
    NumberFormat money = NumberFormat.getCurrencyInstance();

    accountString = cust.toString();
    accountString += " Current balance is " + money.format (balance);
    return accountString;
}

我如何用Junit测试它?

3 个答案:

答案 0 :(得分:13)

我是这样做的:

public class AccountTest
{
    @Test
    public void testToString()
    {
        Account account = new Account(); // you didn't supply the object, so I guessed
        String expected = ""; // put the expected value here
        Assert.assertEquals(expected, account.toString());
    }
}

答案 1 :(得分:5)

我一直在想这个,虽然我觉得duffymo的答案很好,但这不是最好的。

我看到的问题是你不能总是知道的事情,或者正如你在评论中指出的那样,换行符和其他可能无关紧要的空格字符。

所以我认为更好的是不使用assertEquals,我会说assertTrue与contains一起使用(检查字符串中是否存在特定的String)和/或匹配(使用正则表达式查看String是否包含某个字符串)图案)。

假设您正在使用定义为

的Name类
public class Name {
    // each of these can only be alphabetic characters
    String first;
    String middle;
    String last;

    // a bunch of methods here

    String toString(){
        String out = "first=" + first + "\n" +
                     "middle=" + middle + "\n" +
                     "last=" + last + "\n" +
                     "full name=" + first + " " middle + " " + last;
    }
}

所以现在用以下方法测试它(假设name是在先前的setUp方法中创建的Name对象)

void toStringTest1(){
    String toString = name.toString();
    // this test checks that the String at least is 
    // outputting "first=" followed by the first variable
    // but the first variable may incorrect 1's and 0's
    assertTrue(toString.contains("first=" + first));
}

void toStringTest2(){
    String toString = name.toString();
    // this test checks that the String has "first="
    // followed by only alphabetic characters
    assertTrue(toString.matches("first=[a-zA-Z]*?"));
}

这种测试比duffymo所说的要强大得多。如果您希望toString包含哈希码,您将无法事先知道预期值可能是什么。

这也可以让你涵盖更多的可能性。可能是您的一个预期值恰好是它适用的情况。

另外,请记住,您还希望在设置第一个变量时进行测试(在我的情况下)。虽然有人可能会认为进行setFirst测试就足够了,但最好还是进行更多的测试,因为它可能是setFirst工作但你有一些失败的toString(也许你先拆分并添加:没有意识到)

更多种类的测试总是更好!

答案 2 :(得分:2)

用于在模型类上测试toString的非常好的库: https://github.com/jparams/to-string-verifier

样品:

@Test
public void myTest()
{
    ToStringVerifier.forClass(Student.class).verify();
}