我是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”;
我只是想知道如何在代码中使用它。
答案 0 :(得分: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);
}
}
答案 1 :(得分: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});
}
等...
答案 2 :(得分:0)
@Test(expected=IllegalArgumentException.class)
每个测试用例以下面的形式实现一个测试方法(这段特殊代码可能无法编译:)
@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);
}
}