1

私はテストの世界の初心者であり、junitを使用してアプリケーションのテストを開始しています。クラスがあります。

public class Sender implements Runnable
{
   private httpd server;

   public Sender(httpd server_)
   {
     this.server = server_
   }

   public void run()
   {

     ...    

   }
}

httpdクラスから受け取った参照がであるかどうかをテストしnullます。使用する必要があると読みassertNotNullましたが、SenderTestクラスを作成した後に何をするのか明確ではありません。SenderTestクラス(junitフレームワークを介して作成された)内にアノテーションを持つメソッドを作成するために読みましたが、@Testその後は何をする必要がありますか?

4

2 に答える 2

3

それはあなたがあなたのクラスをテストするべき方法ではありません。

nullであるかどうかhttpdは、の契約の一部ではSenderなく、のクライアントですSender

次のことをお勧めします。

  • 引数としてSender受け取った場合の動作を定義します。nullserver_

    たとえば、 「もしもserver_nullIllegalArgumentException」のように言うことをお勧めします

  • 指定されたとおりに動作することを表明するテストを作成します。たとえば、次のようなことを行うことによって

    try {
        new Sender(null);
        fail("Should not accept null argument");
    } catch (IllegalArgumentException expected) {
    }
    
于 2012-07-13T07:44:22.840 に答える
2

JUnitを使用してコードをテストする必要がある場合は、このアプローチを検討してください。

これは、JUnitテストがどのように機能するかの例です。


public class Factorial {

    /**
     * Calculates the factorial of the specified number in linear time and constant space complexity.<br>
     * Due to integer limitations, possible calculation of factorials are for n in interval [0,12].<br>
     * 
     * @param n the specified number
     * @return n!
     */
    public static int calc(int n) {
        if (n < 0 || n > 12) {
            throw new IllegalArgumentException("Factorials are defined only on non-negative integers.");
        }

        int result = 1;

        if (n < 2) {
            return result;
        }

        for (int i = 2; i <= n; i++) {
            result *= i;
        }

        return result;
    }

}

import static org.junit.Assert.*;

import org.junit.Test;

public class FactorialTest {

    @Test
    public void factorialOfZeroShouldBeOne() {
        assertEquals(1, Factorial.calc(0));
    }

    @Test
    public void factorialOfOneShouldBeOne() {
        assertEquals(1, Factorial.calc(1));
    }

    @Test
    public void factorialOfNShouldBeNTimesFactorialOfNMinusOne() {
        for (int i = 2; i <= 12; i++) {
            assertEquals(i * Factorial.calc(i - 1), Factorial.calc(i));
            System.out.println(i + "! = " + Factorial.calc(i));
        }
    }

    @Test(expected = IllegalArgumentException.class)
    public void factorialOfNegativeNumberShouldThrowException() {
        Factorial.calc(-1);
        Factorial.calc(Integer.MIN_VALUE);
    }

    @Test(expected = IllegalArgumentException.class)
    public void factorialOfNumberGreaterThanTwelveShouldThrowException() {
        Factorial.calc(13);
        Factorial.calc(20);
        Factorial.calc(50);
    }
}
于 2012-07-13T07:48:58.567 に答える