如何测试此对象是否返回正确的字符串?

时间:2014-06-10 20:10:02

标签: java unit-testing testing junit

我有一个Thing类,它包含各种Strings和一个Stuff集合。 我必须测试Message类是否可以在MessageTest类中正确地将 item 作为“found”返回。

最优雅/最有效的测试方法是什么?

我应该创建什么样的假对象,以及如何对其进行测试?

public class Thing
{
    public String a;
    public String b;
    public String c;
    public String d;
    public String e;
    public Collection<Stuff> collection;
}

public class Message
{
    private String item;

    public Message(Thing thing)
    {
        for (Stuff stuff : thing.collection)
        {
            if (stuff.getItem().equals("key"))
            {
                item = "found";
            }
        }
    }


@Override
public String toString()
{
    StringBuilder builder = new StringBuilder();
    builder.append(a);
    builder.append(b);
    builder.append(c);
    builder.append(d);
    builder.append(e);
    builder.append(item);
    return builder.toString();
}
}

1 个答案:

答案 0 :(得分:2)

JUnit的想法是进行单元测试。我认为你应该测试一种特定的方法,你知道它应该做什么,而不是&#34;假装&#34;任何事情(我理解伪造mocking),例如:

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class PayrollTesCase {

    @Test
    public void testCalculate() {
        Message m = new Message(new Thing("a", "b", "c", "d", "e"));
        assertEquals("abcde", m.toString());
    }

}

因此,如果您将来更改Message.toString()实现,则会引入一个错误并返回&#34; cde&#34;那么你的具体测试用例就会失败。这是单元测试的理念。

我喜欢这个定义:

  

单元测试是软件测试过程中的一个级别   测试软件/系统的各个单元/组件。该   目的是验证软件的每个单元的执行情况   设计的。

在JUnit 4.x中,所有方法都有注释。因此,JUnit方法中的控制流程可以描述如下:

@BeforeClass -> @Before -> @Test -> @After -> @AfterClass

顺便说一句,你有不同程度的测试,单元测试是最小的&#34;。我不确定你需要什么,但也许你想进行整合测试。

software testing hierarchy