在Eclipse中使用JUnit4进行单元测试(高级篇)
???? public ? void ?squareRoot( int ?n)? ... {
???????? for ?(;?;)?;????????????????? // Bug?:?死循环
????}
????@Test(timeout? = ? 1000 )
???? public ? void ?squareRoot()? ... {
????????calculator.squareRoot( 4 );
????????assertEquals( 2 ,?calculator.getResult());
?
????}
??@Test(expected? = ?ArithmeticException. class )
?? public ? void ?divideByZero()? ... {
calculator.divide( 0 );?
??}
如上述代码所示,我们需要使用
@Test标注的expected属性,将我们要检验的异常传递给他,这样JUnit框架就能自动帮我们检测是否抛出了我们指定的异常。
import ?org.junit.internal.runners.TestClassRunner;
import ?org.junit.runner.RunWith;
?
// 使用了系统默认的TestClassRunner,与下面代码完全一样
public ? class ?CalculatorTest? ... {
...
}
?
?
@RunWith(TestClassRunner. class )
public ? class ?CalculatorTest? ... {
...
}
import ?org.junit.AfterClass;
import ?org.junit.Before;
import ?org.junit.BeforeClass;
import ?org.junit.Test;
import ? static ?org.junit.Assert. * ;
?
public ? class ?AdvancedTest? ... {
?
private ? static ?Calculator?calculator?=? new ?Calculator();
?
????@Before
public ? void ?clearCalculator()? ... {
????????calculator.clear();
????}
?
????@Test
???? public ? void ?square1()? ... {
????????calculator.square( 2 );
????????assertEquals( 4 ,?calculator.getResult());
????}
?
????@Test
???? public ? void ?square2()? ... {
????????calculator.square( 0 );
????????assertEquals( 0 ,?calculator.getResult());
????}
?
????@Test
???? public ? void ?square3()? ... {
????????calculator.square( - 3 );
????????assertEquals( 9 ,?calculator.getResult());
????}
?
}
import ? static ?org.junit.Assert.assertEquals;
import ?org.junit.Test;
import ?org.junit.runner.RunWith;
import ?org.junit.runners.Parameterized;
import ?org.junit.runners.Parameterized.Parameters;
?
import ?java.util.Arrays;
import ?java.util.Collection;
?
@RunWith(Parameterized. class )
public ? class ?SquareTest? ... {
?
???? private ? static ?Calculator?calculator? = ? new ?Calculator();
???? private ? int ?param;
???? private ? int ?result;
?
????@Parameters
???? public ? static ?Collection?data()? ... {
???????? return ?Arrays.asList( new ?Object[][] ... {
???????????????? ... { 2 ,? 4 } ,
???????????????? ... { 0 ,? 0 } ,
???????????????? ... {- 3 ,? 9 } ,
????????} );
????}
?
?
// 构造函数,对变量进行初始化
???? public ?SquareTest( int ?param,? int ?result)? ... {
???????? this .param? = ?param;
???????? this .result? = ?result;
????}
?
????@Test
???? public ? void ?square()? ... {
????????calculator.square(param);
????????assertEquals(result,?calculator.getResult());
????}
?
}
import ?org.junit.runner.RunWith;
import ?org.junit.runners.Suite;
@RunWith(Suite. class )
@Suite.SuiteClasses( ... {
????????CalculatorTest. class ,
????????SquareTest. class
????????} )
public ? class ?AllCalculatorTests? ... {
}