用junit测试我的应用程序

时间:2012-07-13 07:41:13

标签: java junit

我是测试世界的新手,我开始使用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的方法。但之后我要做什么?

2 个答案:

答案 0 :(得分:3)

这不是你应该测试你班级的方式。

httpd是否为空不属于Sender合同的一部分,而是Sender的客户。

我建议你做以下事情:

  • 定义Sender收到null作为server_参数时的行为方式。

    我建议例如说如果server_null,则会引发IllegalArgumentException

  • 创建一个测试,断言它的行为符合指定。例如,做一些像

    这样的事情
    try {
        new Sender(null);
        fail("Should not accept null argument");
    } catch (IllegalArgumentException expected) {
    }
    

答案 1 :(得分: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);
    }
}