版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單元測(cè)試工具單元測(cè)試工具Junit本章目標(biāo)本章目標(biāo)n單元測(cè)試的目的單元測(cè)試的目的n掌握如何利用掌握如何利用Junit編寫(xiě)簡(jiǎn)單測(cè)試編寫(xiě)簡(jiǎn)單測(cè)試n了解了解Junit的基本框架的基本框架引入引入n測(cè)試驅(qū)動(dòng)開(kāi)發(fā)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(”(Test-Driven Development, 簡(jiǎn)稱(chēng)簡(jiǎn)稱(chēng)TDD) 是極限編程是極限編程(Extreme programming 簡(jiǎn)稱(chēng)簡(jiǎn)稱(chēng)XP)的重要特點(diǎn)的重要特點(diǎn)n以持續(xù)性的測(cè)試來(lái)推動(dòng)代碼的開(kāi)發(fā),即可以簡(jiǎn)化代以持續(xù)性的測(cè)試來(lái)推動(dòng)代碼的開(kāi)發(fā),即可以簡(jiǎn)化代碼,又可以保證質(zhì)量。它改變了先編寫(xiě)代碼,后編碼,又可以保證質(zhì)量。它改變了先編寫(xiě)代碼,后編寫(xiě)測(cè)試,而是先編寫(xiě)測(cè)試,然后在編寫(xiě)代碼
2、來(lái)滿(mǎn)足寫(xiě)測(cè)試,而是先編寫(xiě)測(cè)試,然后在編寫(xiě)代碼來(lái)滿(mǎn)足測(cè)試的方法。測(cè)試的方法。n這樣使得測(cè)試工作不僅僅是單純的測(cè)試,而成為了這樣使得測(cè)試工作不僅僅是單純的測(cè)試,而成為了設(shè)計(jì)的一部分。當(dāng)你習(xí)慣了這種編程方式之后,你設(shè)計(jì)的一部分。當(dāng)你習(xí)慣了這種編程方式之后,你會(huì)發(fā)現(xiàn),會(huì)發(fā)現(xiàn),TDD會(huì)成為你的得力助手。會(huì)成為你的得力助手。nJunit可以成為一個(gè)可以成為一個(gè)TDD或單元測(cè)試很好的工具或單元測(cè)試很好的工具 JUnit的目標(biāo)的目標(biāo)nJUnit 就是為就是為 Java 程序開(kāi)發(fā)者實(shí)現(xiàn)單元測(cè)試程序開(kāi)發(fā)者實(shí)現(xiàn)單元測(cè)試提供一種框架,使得提供一種框架,使得 Java 單元測(cè)試更規(guī)范有單元測(cè)試更規(guī)范有效,并且更有利于測(cè)
3、試的集成效,并且更有利于測(cè)試的集成n框架的三個(gè)目標(biāo)框架的三個(gè)目標(biāo)n第一個(gè)是簡(jiǎn)化測(cè)試的編寫(xiě),這種簡(jiǎn)化包括測(cè)試框架第一個(gè)是簡(jiǎn)化測(cè)試的編寫(xiě),這種簡(jiǎn)化包括測(cè)試框架的學(xué)習(xí)和實(shí)際測(cè)試單元的編寫(xiě);的學(xué)習(xí)和實(shí)際測(cè)試單元的編寫(xiě);n第二個(gè)是使測(cè)試單元保持持久性;第二個(gè)是使測(cè)試單元保持持久性;n第三個(gè)則是可以利用既有的測(cè)試來(lái)編寫(xiě)相關(guān)的測(cè)試。第三個(gè)則是可以利用既有的測(cè)試來(lái)編寫(xiě)相關(guān)的測(cè)試。一個(gè)例子:一個(gè)例子:獨(dú)立靜態(tài)方法,查找獨(dú)立靜態(tài)方法,查找list中的最大值中的最大值package TestOne;public class Largest public static int largest(int list) as
4、sertTrue(a=2); assertEquals(a,b);一個(gè)例子一個(gè)例子一個(gè)例子一個(gè)例子package TestOne;import junit.framework.*;public class TestLargest extends TestCasepublic TestLargest(String name)super(name);public void testSimple() assertEquals(9,Largest.largest(new int7,8,9);完善獨(dú)立靜態(tài)方法完善獨(dú)立靜態(tài)方法largest,package TestOne;public class Lar
5、gest public static int largest(int list) int index,max=Integer.MAX_VALUE; for (index=0;indexmax)max=listindex; /end if/end forreturn max; /end function largest 一個(gè)例子一個(gè)例子一個(gè)例子一個(gè)例子n測(cè)試出現(xiàn)錯(cuò)誤測(cè)試出現(xiàn)錯(cuò)誤n修改修改一個(gè)例子:一個(gè)例子:獨(dú)立靜態(tài)方法,查找獨(dú)立靜態(tài)方法,查找list中的最大值中的最大值package TestOne;public class Largest public static int largest(i
6、nt list) int index,max=Integer.MAX_VALUE; for (index=0;indexmax)max=listindex; /end if/end forreturn max; /end function largest 0一個(gè)例子一個(gè)例子n【思考】用哪些數(shù)組來(lái)進(jìn)行測(cè)試【思考】用哪些數(shù)組來(lái)進(jìn)行測(cè)試n考慮:考慮:n最大數(shù)的位置變化:最左、中間、最右最大數(shù)的位置變化:最左、中間、最右n數(shù)組只有一個(gè)數(shù)數(shù)組只有一個(gè)數(shù)n數(shù)組中有負(fù)數(shù)、相同的數(shù)數(shù)組中有負(fù)數(shù)、相同的數(shù)n測(cè)試為空測(cè)試為空一個(gè)例子一個(gè)例子n最大數(shù)的位置變化:最左、中間、最右最大數(shù)的位置變化:最左、中間、最右nP
7、ublic void testOrder()nassertEquals(9,Largest.largest(new int7,8,9);nassertEquals(9,Largest.largest(new int7,9,8);nassertEquals(9,Largest.largest(new int9,7,8);nn出現(xiàn)錯(cuò)誤,原因?出現(xiàn)錯(cuò)誤,原因?n數(shù)組只有一個(gè)數(shù)數(shù)組只有一個(gè)數(shù)npublic void testOne()nassertEquals(9,Largest.largest(new int9);n一個(gè)例子一個(gè)例子n數(shù)組中有負(fù)數(shù)數(shù)組中有負(fù)數(shù)npublic void testNega
8、tive()nassertEquals(-3,Largest.largest(new int-6,-5,-3);nn出現(xiàn)錯(cuò)誤,原因?出現(xiàn)錯(cuò)誤,原因?一個(gè)例子一個(gè)例子n測(cè)試為空測(cè)試為空npublic void testEmpty()ntrynLargest.largest(new int);nfail(拋出一個(gè)異常拋出一個(gè)異常);ncatch(RuntimeException e)nassertTrue(true);nnn修改考慮數(shù)組為空的情況拋出異常修改考慮數(shù)組為空的情況拋出異常nif (list.length=0)nthrow new RuntimeException(Empty list)
9、;nLesson LearnednCode a little, test a little三三 使用使用JUnit進(jìn)行單元測(cè)試進(jìn)行單元測(cè)試n構(gòu)建單元測(cè)試構(gòu)建單元測(cè)試nJUnit的各種斷言的各種斷言nJunit的框架的框架nJunit軟件結(jié)構(gòu)軟件結(jié)構(gòu)n自定義自定義JUnit斷言斷言nJUnit和異常和異常3.1 構(gòu)建單元測(cè)試構(gòu)建單元測(cè)試n命名習(xí)慣命名習(xí)慣n如果有一個(gè)需要測(cè)試的如果有一個(gè)需要測(cè)試的createAccount方方法,則相應(yīng)的測(cè)試方法應(yīng)取名為法,則相應(yīng)的測(cè)試方法應(yīng)取名為testCreateAccountn當(dāng)然還有很多其他相關(guān)的測(cè)試方法,也必須當(dāng)然還有很多其他相關(guān)的測(cè)試方法,也必須取名為
10、取名為testXxx3.1 構(gòu)建單元測(cè)試構(gòu)建單元測(cè)試n測(cè)試代碼的準(zhǔn)備工作測(cè)試代碼的準(zhǔn)備工作n準(zhǔn)備測(cè)試所需要的各種條件:創(chuàng)建對(duì)象、分準(zhǔn)備測(cè)試所需要的各種條件:創(chuàng)建對(duì)象、分配資源配資源n選擇要測(cè)試的方法,設(shè)計(jì)測(cè)試用例。選擇要測(cè)試的方法,設(shè)計(jì)測(cè)試用例。n驗(yàn)證被測(cè)試方法的行為與期望是否一致驗(yàn)證被測(cè)試方法的行為與期望是否一致n完成后清理資源完成后清理資源3.2 JUnit的斷言的斷言nJUnit給定的函數(shù),幫助確定被測(cè)試函數(shù)給定的函數(shù),幫助確定被測(cè)試函數(shù)是否工作正常,這些函數(shù)統(tǒng)稱(chēng)為斷言。是否工作正常,這些函數(shù)統(tǒng)稱(chēng)為斷言。它是單元測(cè)試的最基本組成部分它是單元測(cè)試的最基本組成部分n每個(gè)函數(shù)都會(huì)記錄失敗或者錯(cuò)
11、誤,并通每個(gè)函數(shù)都會(huì)記錄失敗或者錯(cuò)誤,并通過(guò)過(guò)JUnit的類(lèi)來(lái)包裹錯(cuò)誤。的類(lèi)來(lái)包裹錯(cuò)誤。n在控制臺(tái)上將通過(guò)紅色條及輔助信息來(lái)在控制臺(tái)上將通過(guò)紅色條及輔助信息來(lái)說(shuō)明。說(shuō)明。JUnit 的斷言的斷言nassertEquals(Object expected,Object actual):兩個(gè)對(duì)象是否相同:兩個(gè)對(duì)象是否相同nassertEquals(int expected,int actual):原始類(lèi)型是否相同。原始類(lèi)型是否相同。nassertNull:指針是否為空:指針是否為空nassertSame assertEquals(Object expected,Object actual): 兩個(gè)
12、對(duì)象的結(jié)兩個(gè)對(duì)象的結(jié)構(gòu)是否相同構(gòu)是否相同nassertTrue(boolean condition):是否返:是否返回真值回真值3.2 JUnit的各種斷言的各種斷言nassertEquals(String message, expected, actual,tolerance)比較兩個(gè)對(duì)象是否相等比較兩個(gè)對(duì)象是否相等nexpected是期望值,是期望值,actual是被測(cè)試代碼實(shí)際產(chǎn)是被測(cè)試代碼實(shí)際產(chǎn)生的值生的值n特殊:數(shù)字組(引用本身),浮點(diǎn)數(shù)需要格外的誤特殊:數(shù)字組(引用本身),浮點(diǎn)數(shù)需要格外的誤差參數(shù)差參數(shù)nassertEquals(“shoule be 3 1/3”, 3.33, 1
13、0.0/3.0, 0.01)3.2 JUnit的各種斷言的各種斷言nassertNull(String message,Object))nassertNotNull(String message,Object))n驗(yàn)證一個(gè)給定的對(duì)象是否為空或非空驗(yàn)證一個(gè)給定的對(duì)象是否為空或非空3.2 JUnit的各種斷言的各種斷言nassertSame (String message,Object expected,Object actual):n兩個(gè)對(duì)象是否引用同一對(duì)象兩個(gè)對(duì)象是否引用同一對(duì)象3.2 JUnit的各種斷言的各種斷言nassertTrue(String message,boolean cond
14、ition):n驗(yàn)證條件二元條件是否返回真值驗(yàn)證條件二元條件是否返回真值3.2 JUnit的各種斷言的各種斷言nFail(String message)n上面的斷言會(huì)使測(cè)試立即失敗上面的斷言會(huì)使測(cè)試立即失敗n用于標(biāo)記某個(gè)不該到達(dá)的分支,如一個(gè)用于標(biāo)記某個(gè)不該到達(dá)的分支,如一個(gè)預(yù)期發(fā)生的異常。預(yù)期發(fā)生的異常。JUnit和異常和異常n兩種需要關(guān)注的異常兩種需要關(guān)注的異常n從測(cè)試代碼拋出的可預(yù)測(cè)異常從測(cè)試代碼拋出的可預(yù)測(cè)異常n由于模塊發(fā)生嚴(yán)重錯(cuò)誤而拋出不可預(yù)測(cè)異常由于模塊發(fā)生嚴(yán)重錯(cuò)誤而拋出不可預(yù)測(cè)異常n例如例如 測(cè)試實(shí)例中數(shù)值為空的情況測(cè)試實(shí)例中數(shù)值為空的情況public void testEmpt
15、y()tryLargest.largest(new int);fail(拋出一個(gè)異常拋出一個(gè)異常);catch(RuntimeException e)assertTrue(true);測(cè)試與異常測(cè)試與異常n雖然你可以自己捕捉部分異常,但建議雖然你可以自己捕捉部分異常,但建議有些出乎意料異常還是讓有些出乎意料異常還是讓JUnit來(lái)完成來(lái)完成n可以寫(xiě)出可以寫(xiě)出npublic void testData() throws FileNoFoundExcepiton enFileInputStream f=new fileInputStream(“data.txt”);n3.2 JUnit的各種斷言的各
16、種斷言n斷言一旦失敗,測(cè)試方法就停止,那么斷言一旦失敗,測(cè)試方法就停止,那么該方法其他的斷言就無(wú)法執(zhí)行該方法其他的斷言就無(wú)法執(zhí)行n只能修復(fù)好失敗的測(cè)試,一步一步的前只能修復(fù)好失敗的測(cè)試,一步一步的前進(jìn)。進(jìn)。n只有當(dāng)所有的測(cè)試都通過(guò)了,你才能夠只有當(dāng)所有的測(cè)試都通過(guò)了,你才能夠增加新的特性增加新的特性n那么如何運(yùn)行一組測(cè)試呢?那么如何運(yùn)行一組測(cè)試呢?3.3 JUnit框架框架n如何運(yùn)行測(cè)試呢?如何運(yùn)行測(cè)試呢?n需要一個(gè)框架需要一個(gè)框架測(cè)試框架測(cè)試框架 import junit.framework.*;public class TestSimplet extends TestCase public
17、 TestSimple (String name) super(name); public void testAdd() assertEquals(2, 1+1); assertEquals(-1, -3+2); 導(dǎo)入所需的導(dǎo)入所需的JUnit類(lèi)類(lèi)創(chuàng)建創(chuàng)建TestCase類(lèi)類(lèi)的子類(lèi)的子類(lèi)每一個(gè)測(cè)試都每一個(gè)測(cè)試都是一個(gè)方法是一個(gè)方法判斷是否相等判斷是否相等創(chuàng)建以創(chuàng)建以String為參為參數(shù)的構(gòu)造函數(shù),調(diào)數(shù)的構(gòu)造函數(shù),調(diào)用用super方法方法實(shí)例一實(shí)例一FoojunitTestCaseexercise1.*FooTesttest1test2n按照框架規(guī)定:編寫(xiě)的所有測(cè)試類(lèi),必須繼承自按照框架規(guī)定:
18、編寫(xiě)的所有測(cè)試類(lèi),必須繼承自 junit.framework.TestCase類(lèi);類(lèi);n里面的測(cè)試方法,命名應(yīng)該以里面的測(cè)試方法,命名應(yīng)該以 Test 開(kāi)頭,必須是開(kāi)頭,必須是 public void 而且不能有參數(shù);而且不能有參數(shù);n為了測(cè)試查錯(cuò)方便,盡量一個(gè)為了測(cè)試查錯(cuò)方便,盡量一個(gè) TestXXX 方法對(duì)一個(gè)方法對(duì)一個(gè)功能單一的方法進(jìn)行測(cè)試;功能單一的方法進(jìn)行測(cè)試;n使用使用 assertEquals等等 junit.framework.TestCase 中的斷言方法來(lái)判斷測(cè)試結(jié)果正確與否。中的斷言方法來(lái)判斷測(cè)試結(jié)果正確與否。n在這個(gè)測(cè)試類(lèi)中有加入多少個(gè)測(cè)試方法,就會(huì)運(yùn)行多在這個(gè)測(cè)試類(lèi)中
19、有加入多少個(gè)測(cè)試方法,就會(huì)運(yùn)行多少個(gè)測(cè)試方法。少個(gè)測(cè)試方法。測(cè)試相關(guān)規(guī)則測(cè)試相關(guān)規(guī)則3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu) nJUnit 共有七個(gè)包共有七個(gè)包n核心的包就是核心的包就是junit.framework和和 junit.runner nframework負(fù)責(zé)整個(gè)測(cè)試對(duì)象的構(gòu)架負(fù)責(zé)整個(gè)測(cè)試對(duì)象的構(gòu)架nrunner負(fù)責(zé)測(cè)試驅(qū)動(dòng)。負(fù)責(zé)測(cè)試驅(qū)動(dòng)。nTestCase、TestSuite 和和 BaseTestRunner是是 JUnit 框架的骨干。一旦理解了這框架的骨干。一旦理解了這 3 個(gè)類(lèi)個(gè)類(lèi)的工作方式,就可以隨心所欲地編寫(xiě)測(cè)試了。的工作方式,就可以隨心所欲地編寫(xiě)測(cè)試了。nTestC
20、ase (測(cè)試用例測(cè)試用例)擴(kuò)展了擴(kuò)展了JUnit 的的 TestCase TestCase 類(lèi)的類(lèi)。類(lèi)的類(lèi)。n它以它以 testXxx 方法的形式包含一個(gè)或多個(gè)測(cè)方法的形式包含一個(gè)或多個(gè)測(cè)試。一個(gè)試。一個(gè) test case 把具有公共行為的測(cè)試歸把具有公共行為的測(cè)試歸入一組。入一組。n當(dāng)提到測(cè)試的時(shí)候,指的是一個(gè)當(dāng)提到測(cè)試的時(shí)候,指的是一個(gè) testXxx方法;方法;當(dāng)提及當(dāng)提及 test case 的時(shí)候,指的是一個(gè)繼承自的時(shí)候,指的是一個(gè)繼承自Testcase 的類(lèi),也就是一組測(cè)試。的類(lèi),也就是一組測(cè)試。3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)nTestSuite(測(cè)試集合測(cè)試集合)一
21、組測(cè)試。一個(gè)一組測(cè)試。一個(gè)test suite 是把多個(gè)相關(guān)測(cè)試歸入一組的便捷方式。是把多個(gè)相關(guān)測(cè)試歸入一組的便捷方式。n如果你沒(méi)有為如果你沒(méi)有為 TestCase 定義一個(gè)定義一個(gè) test suite,那么,那么 JUnit 就會(huì)自動(dòng)提供一個(gè)就會(huì)自動(dòng)提供一個(gè) test suite,包含,包含 TestCase 中所有的測(cè)中所有的測(cè)試。試。nTestRunner(測(cè)試運(yùn)行器測(cè)試運(yùn)行器)執(zhí)行執(zhí)行 test suite 的程的程序。序。nJUnit 提供了幾個(gè)提供了幾個(gè) test runner,可以用它們來(lái)執(zhí)行測(cè)試。,可以用它們來(lái)執(zhí)行測(cè)試。n沒(méi)有沒(méi)有 TestRunner 接口,只有一個(gè)所有接口
22、,只有一個(gè)所有 test runner 都繼都繼承的承的 BaseTestRunner。n當(dāng)編寫(xiě)當(dāng)編寫(xiě) TestRunner 的時(shí)候,實(shí)際上指的是任何繼承的時(shí)候,實(shí)際上指的是任何繼承 BaseTestRunner 的的 test runner 類(lèi)。類(lèi)。3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)TestCaseTestSuiteBaseTestRunnerTestResult+=JUnit 成員共同產(chǎn)生測(cè)試結(jié)果成員共同產(chǎn)生測(cè)試結(jié)果3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)n當(dāng)需要編寫(xiě)更多的當(dāng)需要編寫(xiě)更多的 test case 的時(shí)候,可以創(chuàng)的時(shí)候,可以創(chuàng)建更多的建更多的 TestCase 對(duì)象。對(duì)象
23、。n當(dāng)需要一次執(zhí)行多個(gè)當(dāng)需要一次執(zhí)行多個(gè) TestCase 對(duì)象的時(shí)候,對(duì)象的時(shí)候,可以創(chuàng)建另一個(gè)叫做可以創(chuàng)建另一個(gè)叫做 TestSuite 的對(duì)象。的對(duì)象。n為了執(zhí)行為了執(zhí)行TestSuite,需要使用,需要使用 TestRunnern在正常情況下,只需要編寫(xiě)在正常情況下,只需要編寫(xiě)test case,其他類(lèi)會(huì)協(xié)助完成測(cè)試。其他類(lèi)會(huì)協(xié)助完成測(cè)試。n這這 3 個(gè)類(lèi)和另外個(gè)類(lèi)和另外 4 個(gè)類(lèi)緊密配合,形成個(gè)類(lèi)緊密配合,形成了了 JUnit 框架的核心。下表歸納了這框架的核心。下表歸納了這 7 個(gè)核心類(lèi)各自的責(zé)任。個(gè)核心類(lèi)各自的責(zé)任。3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)類(lèi)類(lèi)/接口接口 責(zé)責(zé) 任
24、任 Assert當(dāng)條件成立時(shí) assert 方法保持沉默,但若條件不成立就拋出異常 TestResultTestResult 包含了測(cè)試中發(fā)生的所有錯(cuò)誤或者失敗包含了測(cè)試中發(fā)生的所有錯(cuò)誤或者失敗Test可以運(yùn)行可以運(yùn)行 Test 并把結(jié)果傳遞給并把結(jié)果傳遞給 TestResultTestListener測(cè)試中若產(chǎn)生事件測(cè)試中若產(chǎn)生事件(開(kāi)始、結(jié)束、錯(cuò)誤、失敗開(kāi)始、結(jié)束、錯(cuò)誤、失敗)會(huì)通知會(huì)通知 TestListenerTestCaseTestCase 定義了可以用于運(yùn)行多項(xiàng)測(cè)試的環(huán)境定義了可以用于運(yùn)行多項(xiàng)測(cè)試的環(huán)境TestSuiteTestSulte 運(yùn)行一組運(yùn)行一組 test ease (它
25、們可能包含其他它們可能包含其他 testsuite),它是,它是Test的組合的組合BaseTestRunnertest runner 是用來(lái)啟動(dòng)測(cè)試的用戶(hù)界面,是用來(lái)啟動(dòng)測(cè)試的用戶(hù)界面,BaseTestRunner 是所有是所有 test runner 的超類(lèi)的超類(lèi)JUnit 框架的基本結(jié)構(gòu)框架的基本結(jié)構(gòu)run()TestfNamesetUp()runTest()tearDown()run()TestCaserun()addTest()TestSuite*TestResultjunit.frameworkassertTrue()assertEquals().Assertjunit.textui.TestRunnerjunit.swingui.TestRunner3.5 自定義自定義JUnit斷言斷言n通常標(biāo)準(zhǔn)斷言對(duì)大多數(shù)測(cè)試已經(jīng)夠用,通常標(biāo)準(zhǔn)斷言對(duì)大多數(shù)測(cè)試已經(jīng)夠用,但在某些環(huán)境下可能要處理特殊數(shù)據(jù)類(lèi)但在某些環(huán)境下可能要處理特殊數(shù)據(jù)類(lèi)型或多個(gè)測(cè)試共享的操作,就需要自定型或多個(gè)測(cè)試共享的操作,就需要自定義斷言。義斷言。n如測(cè)試一個(gè)經(jīng)濟(jì)方面的程序且所有測(cè)試如測(cè)試一個(gè)經(jīng)濟(jì)方面的程序且所有測(cè)試都使用了都使用了Money數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型3.5 自定義自定義JUnit斷言斷
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年份餐飲廢棄物處理承包協(xié)議3篇
- 2025版挖掘機(jī)械銷(xiāo)售代理合同模板
- 二零二五年度哺乳期離婚雙方子女保險(xiǎn)權(quán)益轉(zhuǎn)移協(xié)議2篇
- 2024證券公司與其合作方之間國(guó)際證券交易合同
- 二零二五版領(lǐng)養(yǎng)未成年人監(jiān)護(hù)責(zé)任協(xié)議參考4篇
- 二零二五版園林景觀(guān)木工施工合作協(xié)議4篇
- 二零二五版合伙房產(chǎn)買(mǎi)賣(mài)合同及配套裝修設(shè)計(jì)服務(wù)6篇
- 2025年度特種運(yùn)輸服務(wù)買(mǎi)賣(mài)合同安全與時(shí)效承諾
- 2025版彩禮退還與婚姻解除條件及財(cái)產(chǎn)分割協(xié)議書(shū)范本3篇
- 基于2025年度規(guī)劃的文化園區(qū)停車(chē)場(chǎng)建設(shè)與運(yùn)營(yíng)合同3篇
- 柴油墊資合同模板
- 湖北省五市州2023-2024學(xué)年高一下學(xué)期期末聯(lián)考數(shù)學(xué)試題
- 城市作戰(zhàn)案例研究報(bào)告
- 【正版授權(quán)】 ISO 12803:1997 EN Representative sampling of plutonium nitrate solutions for determination of plutonium concentration
- 道德經(jīng)全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書(shū)范文
- 安踏運(yùn)動(dòng)品牌營(yíng)銷(xiāo)策略研究
- 彩票市場(chǎng)銷(xiāo)售計(jì)劃書(shū)
- 骨科抗菌藥物應(yīng)用分析報(bào)告
- 支付行業(yè)反洗錢(qián)與反恐怖融資
評(píng)論
0/150
提交評(píng)論