Paste_Image.png
public class CalculateTest {
/*
* 1.測試方法上必須使用@Test進行修飾
* 2.測試方法必須使用public void 進行修飾炬守,不能帶任何的參數(shù)
* 3.新建一個源代碼目錄來存放我們的測試代碼
* 4.測試類的包應(yīng)該和被測試類保持一致
* 5.測試單元中的每個方法必須可以獨立測試能庆,測試方法間不能有任何的依賴
* 6.測試類使用Test作為類名的后綴(不是必須)
* 7.測試方法使用test作為方法名的前綴(不是必須)
*/
@Test
public void testAdd() {
assertEquals(6, new Calculate().add(3,3));
}
@Test
public void testSubtract() {
assertEquals(3, new Calculate().subtract(5,2));
}
@Test
public void testMultiply() {
assertEquals(4, new Calculate().multiply(2, 2));
}
@Test
public void testDivide() {
assertEquals(3, new Calculate().divide(6, 2));
}
}
====================================
public class JunitFlowTest {
/*
* 1.@BeforeClass修飾的方法會在所有方法被調(diào)用前被執(zhí)行兽狭,
* 而且該方法是靜態(tài)的,所以當測試類被加載后接著就會運行它头岔,
* 而且在內(nèi)存中它只會存在一份實例,它比較適合加載配置文件烁涌。
* 2.@AfterClass所修飾的方法通常用來對資源的清理手形,如關(guān)閉數(shù)據(jù)庫的連接
* 3.@Before和@After會在每個測試方法的前后各執(zhí)行一次。
*
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("this is beforeClass...");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("this is afterClass...");
}
@Before
public void setUp() throws Exception {
System.out.println("this is before...");
}
@After
public void tearDown() throws Exception {
System.out.println("this is after");
}
@Test
public void test1() {
System.out.println("this is test1...");
}
@Test
public void test2(){
System.out.println("this is test2...");
}
====================================
public class ErrorAndFailureTest {
/*
* 1.Failure一般由單元測試使用的斷言方法判斷失敗所引起的稠集,這經(jīng)表示 測試點發(fā)現(xiàn)了問題
* 奶段,就是說程序輸出的結(jié)果和我們預(yù)期的不一樣。
* 2.error是由代碼異常引起的剥纷,它可以產(chǎn)生于測試代碼本身的錯誤痹籍,也可以是被測試代碼中的
* 一個隱藏的bug
* 3.測試用例不是用來證明你是對的,而是用來證明你沒有錯晦鞋。
*/
@Test
public void testAdd() {
assertEquals(5, new Calculate().add(3,3));
}
@Test
public void testDivide() {
assertEquals(3, new Calculate().divide(6, 0));
}
}
===============================================
public class AnotationTest {
/*
* @Test:將一個普通的方法修飾成為一個測試方法
* @Test(expected=XX.class)
* @Test(timeout=毫秒 )
* @BeforeClass:它會在所有的方法運行前被執(zhí)行蹲缠,static修飾
* @AfterClass:它會在所有的方法運行結(jié)束后被執(zhí)行,static修飾
* @Before:會在每一個測試方法被運行前執(zhí)行一次
* @After:會在每一個測試方法運行后被執(zhí)行一次
* @Ignore:所修飾的測試方法會被測試運行器忽略
* @RunWith:可以更改測試運行器 org.junit.runner.Runner
*/
@Test(expected=ArithmeticException.class)
public void testDivide() {
assertEquals(3, new Calculate().divide(6, 0));
}
@Ignore("...")
@Test(timeout=2000)
public void testWhile() {
while(true) {
System.out.println("run forever...");
}
}
@Test(timeout=3000)
public void testReadFile(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
========================================
@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})
public class SuiteTest {
/*
* 1.測試套件就是組織測試類一起運行的
*
* 寫一個作為測試套件的入口類悠垛,這個類里不包含其他的方法
* 更改測試運行器Suite.class
* 將要測試的類作為數(shù)組傳入到Suite.SuiteClasses({})
*/
}
=====================================
@RunWith(Parameterized.class)
public class ParameterTest {
/*
* 1.更改默認的測試運行器為RunWith(Parameterized.class)
* 2.聲明變量來存放預(yù)期值 和結(jié)果值
* 3.聲明一個返回值 為Collection的公共靜態(tài)方法线定,并使用@Parameters進行修飾
* 4.為測試類聲明一個帶有參數(shù)的公共構(gòu)造函數(shù),并在其中為之聲明變量賦值
*/
int expected =0;
int input1 = 0;
int input2 = 0;
@Parameters
public static Collection<Object[]> t() {
return Arrays.asList(new Object[][]{
{3,1,2},
{4,2,2}
}) ;
}
public ParameterTest(int expected,int input1,int input2) {
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
}
@Test
public void testAdd() {
assertEquals(expected, new Calculate().add(input1, input2));
}
}