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