1

私は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; 数字="12;57;65" インデックス="2";

expResult=39; 数字="09;78;45;39;05" インデックス="3";

コードでこれを使用する方法を知りたいだけです。

4

3 に答える 3

2

あなたのクラスがこのように見えると仮定すると

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);
    }

}
于 2014-01-11T02:49:41.803 に答える
1

メソッドが基本的に行うことは、セミコロンで区切られた数値の配列から、最初にそれらを 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});
}

等...

于 2014-01-10T23:16:07.180 に答える