2

Junit を使用してこのコードを単体テストする方法

public class Diamond {

   public void DiamondShape(int num) {

       for(int ucount=num;ucount>0;ucount--) {
    //Loop to print blank space
        for(int count_sp=1;count_sp<ucount;count_sp++)
            System.out.printf(" ");
    //Loop to print *
        for(int count_ast=num;count_ast>=ucount;count_ast--)
            System.out.printf("* ");
        System.out.println();
       }
//Loop for lower half
  for(int lcount=1;lcount<num;lcount++) {
    //Loop to print blank space
    for(int count_sp=0;count_sp<lcount;count_sp++)
            System.out.printf(" ");
    //Loop to print *
        for(int count_ast=num-1;count_ast>=lcount;count_ast--)
            System.out.printf("* ");
    System.out.println();
    }
  } 
}

私は単体テストが初めてで、単体テストに関するガイダンスが必要です。

num=3 の場合の出力

   *
  * *
 * * *
  * *
   *

これが出力のあり方です。数値は中心線の星を示します

4

3 に答える 3

4

sysout を実行する代わりに、リファクタリングしてメソッドが出力を返すようにする必要があります。その後、出力を確認できます。

もう 1 つのオプションは、junit テストで出力ストリームを作成し、それを

System.setOut(your output stream);

その後、出力ストリームを確認できます。

しかし、プログラムが sysout にも書き込む他のコードを実行すると、出力ストリームにもそのデータが含まれるため、これは信頼できません。

于 2013-04-15T08:10:47.150 に答える
0

形状を直接印刷する代わりに、形状をArrayList<String>

public class Diamond {
    private List<String> shape = null;

    public void createShape(int num) {
        shape = new ArrayList<String>();
        String shapeLine = "";
        for(int ucount=num;ucount>0;ucount--) {
            for(int count_sp=1;count_sp<ucount;count_sp++) {
                shapeLine += " ";
            }
            for(int count_ast=num;count_ast>=ucount;count_ast--) {
                shapeLine += "* ";
            }
            shape.add(shapeLine);
        }

        shapeLine = "";
        for(int lcount=1;lcount<num;lcount++) {
           for(int count_sp=0;count_sp<lcount;count_sp++) {
                shapeLine += " ";
           }
           for(int count_ast=num-1;count_ast>=lcount;count_ast--) {
               shapeLine += "* ";
           }
           shape.Add(shapeLine);
        }
    } 

    public void printShape(OutStream out) {
        if(shape != null) {
            for(String shapeLine : shape) {
                out.println(shapeLine);
            }
        }
    }

    public List<String> getShape() {
        return shape;
    } 
}

これで、コードをテストできます:

@Test
public void testShape() {
    Diamond diamond = new Diamond();
    diamond.createShape(3);
    List<String> shape = diamond.getShape();

    assertNotNull(shape);
    assertEquals(5, shape.size());
    assertEquals("  * ", shape.get(0));
    assertEquals(" * * ", shape.get(1));
    assertEquals("* * * ", shape.get(2));
    assertEquals(" * * ", shape.get(3));
    assertEquals("  * ", shape.get(4));
}

形状を印刷するには、単に呼び出します

diamond.printShape(System.out);

上半分と下半分のループの内部はまったく同じであり、独自のメソッドにリファクタリングできます。

于 2013-04-15T08:31:39.930 に答える