1

我有返回名称和值的列表,我有兴趣通过检查返回列表是否按字母顺序排列来创建 Junit 测试。到目前为止,我已经这样做了,但我得到的结果总是 = TRUE,因为我相信它正在考虑“MINTS ......”。所以我的目标是从列表中删除 MINTS ( Name ) 并检查列表 ( VALUE ) 的订单。

从表中列出

在此处输入图像描述

Junit 代码

public void test() throws Exception
    {
        DataObj dao = new DataObj();

        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put( "code", 100 );

        List<?> values = dao.getDataObj( params, conn );

        String previous = "";
        boolean result = false;

        for ( final Object vCurrent : values )
        {

            String current = vCurrent.toString();
            if ( current.compareTo( previous ) < 0 )
            {
                result = false;
                previous = current;

            }
            result = true;
        }


    }

如果我对值进行打印,我会得到类似“薄荷糖戴夫薄荷糖杰基薄荷糖德里克.....”

4

2 回答 2

3

您总是result = true在循环的每次迭代结束时进行设置。

你可以这样做:

    String previous = "";
    boolean result = true;

    for ( final Object vCurrent : values )
    {

        String current = vCurrent.getValue();
        if ( current.compareTo( previous ) < 0 )
        {
            result = false;
            break;
        }
    }
于 2013-02-08T23:45:06.213 回答
1

如果这应该是 JUnit 测试,那么您应该使用 JUnit "assertXxxx" 方法来进行低级测试;例如像这样的东西

    import static org.junit.Assert.*;

    ....

    @Test
    public void testOrdered() {
        DataObj dao = new DataObj();

        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put( "code", 100 );

        List<?> values = dao.getDataObj( params, conn );

        String previous = "";
        for (final Object vCurrent : values) {
            String current = vCurrent.toString();
            assertTrue("list not ordered correctly",  /* this arg is optional */
                       current.compareTo(previous) < 0);
            previous = current;
        }
    }

这完全消除了产生“结果”的需要。

于 2013-02-09T01:34:45.593 回答