繁体   English   中英

如何进行jUnit测试

[英]How to do the jUnit testing

我是jUnit测试的新手,我不知道它是如何工作的,我试着在网上浏览一些教程但是不太了解。 所以我发布了我的代码和testClass的框架,所以在这种情况下如何修改testClass,以便我能理解jUnit的工作原理。

我要测试的方法:

public String quickSortArray(String numbers, String indexNumber) throws NumberFormatException, Exception{

                String[] data = numbers.split(";");
                int index = parseInt(indexNumber);
                int[] inputNum = new int[data.length];

                for (int i = 0; i < data.length; i++) {
                    inputNum[i] = parseInt(data[i]);

                }
                Set<Integer> removeDuplicates = new HashSet<Integer>();
                for (int j = 0; j < inputNum.length; j++) {
                    removeDuplicates.add(inputNum[j]);
                }
                int[] finalSortArray = new int[removeDuplicates.size()];
                int k = 0;
                for (Integer move : removeDuplicates) {
                    finalSortArray[k++] = move;
                }
                Arrays.sort(finalSortArray);
                if (finalSortArray.length < index) {
                    return "The index cannot be greater than the non-repeated numbers";                    
                } else {
                    int result=finalSortArray[finalSortArray.length-index];                    
                    return String.valueOf(result);
                }
            } 

IDE生成的testClass:

/**
     * Test of quickSortArray method, of class quickSort.
     */
    public void testQuickSortArray() throws Exception {
        System.out.println("quickSortArray");
        String numbers = "";
        String indexNumber = "";
        quickSort instance = new quickSort();
        String expResult = "";
        String result = instance.quickSortArray(numbers, indexNumber);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }

所以我只想知道应该如何编写testClass,我的方法是针对其功能进行测试的。 我真的很感激所有的帮助

该方法基本上做的是从分号分隔的数字数组,它首先将它们转换为int,然后删除重复项,然后找到第N个最大数字。 在这种情况下,N是索引。

这是一些手动数据,我不希望回答的人也经历计算这个的麻烦:expResult = 57; numbers =“12; 57; 65”index =“2”;

expResult = 39; numbers =“09; 78; 45; 39; 05”index =“3”;

我只是想知道如何在代码中使用它。

假设你的班级看起来像这样

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;


public class X {

    public String quickSortArray(String numbers, String indexNumber) throws NumberFormatException, Exception{

        String[] data = numbers.split(";");
        int index = parseInt(indexNumber);
        int[] inputNum = new int[data.length];

        for (int i = 0; i < data.length; i++) {
            inputNum[i] = parseInt(data[i]);

        }
        Set<Integer> removeDuplicates = new HashSet<Integer>();
        for (int j = 0; j < inputNum.length; j++) {
            removeDuplicates.add(inputNum[j]);
        }
        int[] finalSortArray = new int[removeDuplicates.size()];
        int k = 0;
        for (Integer move : removeDuplicates) {
            finalSortArray[k++] = move;
        }
        Arrays.sort(finalSortArray);
        if (finalSortArray.length < index) {
            return "The index cannot be greater than the non-repeated numbers";                    
        } else {
            int result=finalSortArray[finalSortArray.length-index];                    
            return String.valueOf(result);
        }
    }

    private int parseInt(String indexNumber) {
        return Integer.parseInt(indexNumber);
    } 
}

我想你可以像这样编写一些JUnit测试

import static org.junit.Assert.*;

import org.junit.Test;


public class XTest {

    @Test
    public void testQuickSortArray1() throws NumberFormatException, Exception {
        String numbers="12;57;65";
        String index="2";
        String result = new X().quickSortArray(numbers, index);
        assertEquals("57",result);
    }

    @Test
    public void testQuickSortArray2() throws NumberFormatException, Exception {
        String numbers="09;78;45;39;05";
        String index="3";
        String result = new X().quickSortArray(numbers, index);
        assertEquals("39",result);
    }

}

该方法基本上做的是从分号分隔的数字数组,它首先将它们转换为int ,然后删除重复项,然后找到第N个最大数字。 在这种情况下,N是索引

第一步是将您的方法拆分为3(或更多),以便您可以单独测试每个方面。

单元测试的想法是,如果每个单独的砖工作,组件就可以工作。

然后你的测试会变得简单得多:

@Test
public void parsesSimpleArray(){
    assertThat( parser.parse("12;57;65") ).eq(new int[]{12,57,65});
}

@Test
public void parseIgnoresEmptyStrings(){
    // or whatever your desired behavior should be
    assertThat( parser.parse("12;;65") ).eq(new int[]{12,65});
}

等等...

  1. 将您的方法拆分为较小的可测试方法:这里有输入解析的组合(从字符串到某种类型的集合)和可能的排序(虽然很难遵循) - 您想分别测试这些功能
  2. 定义要测试的“测试用例”,首先不是以编程方式,而是从概念上。 例如,您想要测试方法是否对空数据失败,对排序数据,大小为1,奇数和偶数大小的数据,多个重复值等进行正常工作
  3. 定义方法应抛出异常的场景,并为其注释为@Test(expected=IllegalArgumentException.class)注释的测试方法@Test(expected=IllegalArgumentException.class)
  4. 每个测试用例以下面的形式实现一个测试方法(这段特殊的代码可能无法编译:)

     @Test public testPresortedValues() { List<Integer> data = Lists.newArrayList(1, 1, 1, 2, 25, 30); List<Integer> expected = Lists.newArrayList(1, 1, 1, 2, 25, 30); Sorter sorter = new Sorter(); sorter.sort(data); for (int i = 0; i < data.size(); ++i) { Asser.assertEquals(data.get(i), expected.get(i); } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM