Yuav ua li cas khiav JUNIT kuaj moj khaum siv muaj cuab tam NTSAUM?

Txheej txheem cej luam:

Nyob rau hauv daim ntawv no peb yuav tham txog qhov muaj cuab tam ntsaum thiab chav tsev kuaj moj khaum Junit. Ob yam no ua tau ib feem ntawm txoj kev loj hlob java. Ntsaum thiab Junit lug siv nyob rau hauv lub ntiaj teb java. Feem ntau cov neeg muas zaub nyiam saib lub tsev kuaj cav ua ntej yuav raug lead lom cov chaws lawv kuaj thiab soj ntsuam tej.

Taw qhia:

Apache ntsaum yog ib tug muaj generic uas. Lub npe NTSAUM es abbreviated rau 'IBnother Nnoj Tool'. Yog zoo li no uas cov 'Ua ' dej nyob hauv UNIX tiam sis yog DVR siv Java. Nws yog neeg siv rau lub binaries ntawm ib java raws li qhov chaws lub tsev thiab deploying tus binary generated rau ib tus neeg neeg rau zaub mov daim ntawv uas tos hais tseg. Nws kuj siv tau ua kom muaj javadocs rau lub chaws puag thiab coj lub tsev kuaj suite rau lub codebase tseem. Ntsaum nrog JUNIT pab tsim tawm los ua raws li txoj kev kuaj no uas tau tsim kev tsav.

Ntsaum yuav tsum tau Java compiler yuav muab ntsia tau nrog lub chaw kuj sib txawv thiab JAVA_HOME teem caij nrog nws cov hauj lwm tus nqi. Ntsaum siv ib XML tej ntaub ntawv txhais tau cov muaj kev. Lub neej ntawd npe ntawm cov ntaub ntawv no yog build.xml. Ib co developers kuj siv lub zog ua ntaub ntawv thov namely build.properties los txhais tau ib co khoom e.g. muaj pes tsawg version thiab lwm yam tsis muaj tej uas yuav tsum tau hloov txij ua ke mus ua ke raws li qhov yuav tsum tau.

Plahaum: Ntawm ntu no peb yuav tham txog tus plahaum cov NTSAUM rau lub txawv operating systems.

FEDORA – Nyob RHEL, NTSAUM yuav muab ntsia tau siv cov kev hais kom ua – yum nruab ntsaum los nws yuav muab ntsia tau siv lub rpm – kuv hais kom ua. Qhov no koj yuav tsum download tau tus ntsaum nws ua ntej.

DEBIAN – Nyob Ubuntu, NTSAUM yuav muab ntsia tau siv qhov hais kom ua – apt-mus nruab ntsaum.

Qhov rais – Ntawm ib puas ncig qhov rais peb yuav tsum download tau lub ant_<VERSION_NO>.cov ntaub ntawv zauv teb. No lub nras zauv teb yuav tsum tau muab rho tawm hauv lub ceev. Nplaub tshev no yuav tsum muab txhais tias yog ib qho chaw kuj sib txawv thiab ANT_HOME.

Muaj ntaub ntawv coj mus kuaj build.xml yog muaj raws li:

QHIA 1: Qauv ntaub ntawv build.xml

<?xml version =”1.0″?>

<lub npe yog ib qhov =”Ntsaum-xeem” vim =”ntsiab” basedir =”.”>

<!– Teev tus nqi uas pub siv tau. –>

<!– Cov nqi rau ib yam khoom yog accessed ntawm ${} –>

<lub npe ntawm tus kheej =”src.dir” qhov chaw =”src” />

<lub npe ntawm tus kheej =”build.dir” qhov chaw =”rau hauv” />

<lub npe ntawm tus kheej =”dist.dir” qhov chaw =”dist” />

<lub npe ntawm tus kheej =”docs.dir” qhov chaw =”docs” />

<!– Deletes tus uas twb muaj lawm docs, muaj thiab dist directory–>

<lub npe phiaj =”ntxuav”>

<rho tawm dir =”${build.dir}” />

<rho tawm dir =”${docs.dir}” />

<rho tawm dir =”${dist.dir}” />

</phiaj>

<!– Ib qho kev lub docs, muaj thiab dist directory–>

<lub npe phiaj =”makedir”>

<mkdir dir =”${build.dir}” />

<mkdir dir =”${docs.dir}” />

<mkdir dir =”${dist.dir}” />

</phiaj>

<!– Compiles lub java chaws (nrog rau cov kev pab ntawm cov tsev qiv ntawv rau JUnit –>

<lub npe phiaj =”compile” yog nyob =”ntxuav, makedir”>

<javac srcdir =”${src.dir}” destdir =”${build.dir}”>

</javac>

</phiaj>

<!– Ib qho kev Javadoc –>

<lub npe phiaj =”docs” yog nyob =”compile”>

<javadoc packagenames =”src” sourcepath =”${src.dir}” destdir =”${docs.dir}”>

<!– Txhais cov ntaub ntawv twg yog cov uas / directory yuav tsum tau tso, peb txheej –>

<fileset dir =”${src.dir}”>

<xws li lub npe =”**” />

</fileset>

</javadoc>

</phiaj>

<!–Ib qho kev deployable thawv ntawv –>

<lub npe phiaj =”hwj iav” yog nyob =”compile”>

<rag destfile =”${dist.dir}\in.kolkalta.build.test.ant.jar” basedir =”${build.dir}”>

<manifest>

<lub npe attribute =”Main kawm” tus nqi =”ntsuam xyuas. Main” />

</manifest>

</hwj iav>

</phiaj>

<lub npe phiaj =”ntsiab” yog nyob =”compile, hwj iav, docs”>

<hauj lwm lawm>Hom loj</hauj lwm lawm>

</phiaj>

</yog ib qhov>

NTSAUM nrog JUNIT:

Ntsaum qhia ib pab loj java developers uas siv tau txoj kev kuaj no uas tau tsim kev tsav. Raws li peb paub hauv kuaj uas tau kev loj hlob vib this JUNIT tsav yog ib tug compulsion, Nws yog ib qho kom zoo dua nws yog tias peb muaj ib tsab ntawv xovtooj kaw lus uas sau tag nrho cov Junit kuaj tus neeg mob nyob mus ib. Tsis tas li ntawd cov tsab ntawv no tseem siv tau yog hais tias peb muaj ib tug nruam kev koom ua ke uas zoo li Hudson. Peb coj cai nram qab no illustrates siv NTSAUM nrog JUNIT.

QHIA 2: Muaj ntaub ntawv coj mus kuaj java

pob com.Home.junit;

pej xeem hoob SampleAdd {

pej xeem rau cov menyuam ntxiv(rau cov menyuam x, rau cov menyuam y) {

rov qab mus x + y;

}

}

QHIA 3: JUNIT ntawv coj

pob com.home.junit;

ntshuam org.junit.After;

ntshuam org.junit.Assert;

ntshuam org.junit.Before;

ntshuam org.junit.Test;

tsev kawm SampleAddTest {

lwm yam SampleAdd sampleClass;

@Before

pej xeem tsis muaj dabtsis teeb() {

sampleClass = SampleAdd tshiab();

}

@Test

pej xeem tsis muaj dabtsis testAdd() {

Assert.assertEquals(5, sampleClass.add(3, 2));

}

@After

pej xeem tsis muaj dabtsis settleDown() {

sampleClass = thov;

}

}

QHIA 4: NTSAUM tsab ntawv rau compile thiab khiav txoj kev kuaj no JUNIT

<?xml version =”1.0″?>

<lub npe yog ib qhov =”JUNIT” vim =”ntsiab” basedir =”..”>

<!– Teev tus nqi uas pub siv tau. –>

<!– Cov nqi rau ib yam khoom yog accessed ntawm ${} –>

<lub npe ntawm tus kheej =”src.dir” qhov chaw =”src” />

<lub npe ntawm tus kheej =”test.dir” qhov chaw =”soj ntsuam” />

<lub npe ntawm tus kheej =”build.dir” qhov chaw =”rau hauv” />

<lub npe ntawm tus kheej =”build.test.dir” qhov chaw =”rau hauv/kev ntsuam xyuas” />

<!– Zog siv rau JUnit testin –>

<lub npe ntawm tus kheej =”test.report.dir” qhov chaw =”testreport” />

<!– Txhais tau cov classpath uas muaj cov junit.jar thiab cov kev kawm tom qab compiling–>

<kev daim id =”junit.class.path”>

<qhov chaw pathelement =”lib/junit-4.11.jar” />

<qhov chaw pathelement =”lib/hamcrest-Core-1.3.jar” />

<qhov chaw pathelement =”${build.dir}” />

</kab>

<!– Deletes tus muaj ib, docs thiab dist ntawv–>

<lub npe phiaj =”ntxuav”>

<rho tawm dir =”${build.dir}” />

<rho tawm dir =”${test.report.dir}” />

</phiaj>

<!– Ib qho ntawm cov muaj, docs thiab dist ntawv–>

<lub npe phiaj =”makedir”>

<mkdir dir =”${build.dir}” />

<mkdir dir =”${build.test.dir}” />

<mkdir dir =”${test.report.dir}” />

</phiaj>

<!– Compiles lub java chaws (nrog rau cov kev pab ntawm cov tsev qiv ntawv rau JUnit –>

<lub npe phiaj =”compile” yog nyob =”ntxuav, makedir”>

<javac srcdir =”${src.dir}” destdir =”${build.dir}”>

<classpath refid =”junit.class.path” />

</javac>

<javac srcdir =”${test.dir}” destdir =”${build.test.dir}”>

<classpath refid =”junit.class.path” />

</javac>

</phiaj>

<!– Khiav kev tshuaj ntsuam JUnit –>

<!– Rau cov zis yog XML, yuav hais tau dawb–>

<lub npe phiaj =”junit” yog nyob =”compile”>

<junit printsummary =”rau” diav rawg =”tseeb” haltonfailure =”muaj”>

<classpath refid =”junit.class.path” />

<classpath>

<qhov chaw pathelement =”${build.test.dir}”/>

</classpath>

<formatter yam =”xml” />

<batchtest todir =”${test.report.dir}”>

<fileset dir =”${test.dir}”>

<xws li lub npe =”**/*Test*.java” />

</fileset>

</batchtest>

</junit>

</phiaj>

<lub npe phiaj =”ntsiab” yog nyob =”compile, junit”>

<hauj lwm lawm>Hom loj</hauj lwm lawm>

</phiaj>

</yog ib qhov>

Thaum peb khiav tsab ntawv no, nws xub compiles chaws puag thiab mam li sau Junit kev ntsuam xyuas rau ntawm qhov chaws compiled thiab generates ib daim ntawv qhia txog kev kuaj thaum kawg. Qhov no qhia tau generated hom ntawv twg. Zoojyim rau peb muaj generated no hom ntawv XML.

QHIA 5: Tus Generated ntsuam xyuas daim ntawv qhia txog hom ntawv XML

<?xml version =”1.0″ encoding =”UTF-8″?>

-<testsuite timestamp =”2013-10-26T18:52:45″ lub sij hawm =”0.077″ kev tshuaj ntsuam =”1″ lub npe =”com.home.junit.SampleAddTest” hostname =”INDTAPPL132-001″ failures =”0″ kom raug =”0″>-<khoom><lub npe ntawm tus kheej =”java.vendor” tus nqi =”Oracle Corporation”/><lub npe ntawm tus kheej =”Sun.java.launcher” tus nqi =”SUN_STANDARD”/><lub npe ntawm tus kheej =”eclipse.pdebuild.templates” tus nqi =”/F:/Utpal/Softs/Softs/eclipse-java-indigo-win32/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/templates/”/><lub npe ntawm tus kheej =”Sun.Management.compiler” tus nqi =”HotSpot kev Compiler”/><lub npe ntawm tus kheej =”os.name” tus nqi =”Qhov rai 7″/><lub npe ntawm tus kheej =”Sun.boot.class.path” tus nqi =”C:\Qhov kev pab cuam FilesJavajre7libresources.jar;C:\Qhov kev pab cuam FilesJavajre7librt.jar;C:\Qhov kev pab cuam FilesJavajre7libsunrsasign.jar;C:\Qhov kev pab cuam FilesJavajre7libjsse.jar;C:\Qhov kev pab cuam FilesJavajre7libjce.jar;C:\Qhov kev pab cuam FilesJavajre7libcharsets.jar;C:\Qhov kev pab cuam FilesJavajre7libjfr.jar;C:\Qhov kev pab cuam FilesJavajre7classes”/><lub npe ntawm tus kheej =”Sun.desktop” tus nqi =”qhov rais”/><lub npe ntawm tus kheej =”java.vm.specification.vendor” tus nqi =”Oracle Corporation”/><lub npe ntawm tus kheej =”ant.Home” tus nqi =”F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300″/><lub npe ntawm tus kheej =”java.runtime.Version” tus nqi =”1.7.0_45-b18″/><lub npe ntawm tus kheej =”user.name” tus nqi =”utpalb”/><lub npe ntawm tus kheej =”build.dir” tus nqi =”F:\WorkRnDSpaceJunitbin”/><lub npe ntawm tus kheej =”user.Language” tus nqi =”• siv cov mis”/><lub npe ntawm tus kheej =”test.report.dir” tus nqi =”F:\WorkRnDSpaceJunittestreport”/><lub npe ntawm tus kheej =”Sun.boot.Library.path” tus nqi =”C:\Qhov kev pab cuam FilesJavajre7bin”/><lub npe ntawm tus kheej =”ant.Project.default-phiaj” tus nqi =”ntsiab”/><lub npe ntawm tus kheej =”ant.Project.name” tus nqi =”JUNIT”/><lub npe ntawm tus kheej =”java.Version” tus nqi =”1.7.0_45″/><lub npe ntawm tus kheej =”user.timezone” tus nqi =””/><lub npe ntawm tus kheej =”Sun.Arch.data.Model” tus nqi =”32″/><lub npe ntawm tus kheej =”java.endorsed.dirs” tus nqi =”C:\Qhov kev pab cuam FilesJavajre7libendorsed”/><lub npe ntawm tus kheej =”Sun.cpu.isalist” tus nqi =”pentium_pro mmx pentium_pro pentium mmx pentium i486 i386 i86″/><lub npe ntawm tus kheej =”Sun.jnu.encoding” tus nqi =”Cp1252″/><lub npe ntawm tus kheej =”File.encoding.pkg” tus nqi =”Sun.io”/><lub npe ntawm tus kheej =”File.separator” tus nqi =”\”/><lub npe ntawm tus kheej =”java.specification.name” tus nqi =”Java Platform API Specification”/><lub npe ntawm tus kheej =”java.class.Version” tus nqi =”51.0″/><lub npe ntawm tus kheej =”user.Country” tus nqi =”PEB”/><lub npe ntawm tus kheej =”java.Home” tus nqi =”C:\Qhov kev pab cuam FilesJavajre7″/><lub npe ntawm tus kheej =”java.vm.info” tus nqi =”mixed hom, sib koom”/><lub npe ntawm tus kheej =”ant.File” tus nqi =”F:\WorkRnDSpaceJunitbuildbuild.xml”/><lub npe ntawm tus kheej =”os.Version” tus nqi =”6.1″/><lub npe ntawm tus kheej =”path.separator” tus nqi =”;”/><lub npe ntawm tus kheej =”java.vm.Version” tus nqi =”24.45-b08″/><lub npe ntawm tus kheej =”user.variant” tus nqi =””/><lub npe ntawm tus kheej =”ant.Library.dir” tus nqi =”F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300lib”/><lub npe ntawm tus kheej =”java.awt.printerjob” tus nqi =”sun.awt.windows.WPrinterJob”/><lub npe ntawm tus kheej =”Sun.io.unicode.encoding” tus nqi =”UnicodeLittle”/><lub npe ntawm tus kheej =”ant.file.type.JUNIT” tus nqi =”cov ntaub ntawv”/><lub npe ntawm tus kheej =”awt.toolkit” tus nqi =”sun.awt.windows.WToolkit”/><lub npe ntawm tus kheej =”user.Script” tus nqi =””/><lub npe ntawm tus kheej =”ant.file.JUNIT” tus nqi =”F:\WorkRnDSpaceJunitbuildbuild.xml”/><lub npe ntawm tus kheej =”eclipse.pdebuild.scripts” tus nqi =”/F:/Utpal/Softs/Softs/eclipse-java-indigo-win32/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/scripts/”/><lub npe ntawm tus kheej =”user.Home” tus nqi =”C:\Usersutpalb”/><lub npe ntawm tus kheej =”java.specification.vendor” tus nqi =”Oracle Corporation”/><lub npe ntawm tus kheej =”test.dir” tus nqi =”F:\WorkRnDSpaceJunittests”/><lub npe ntawm tus kheej =”java.Library.path” tus nqi =”C:\Qhov kev pab cuam FilesJavajre7bin;C:\WindowsSunJavabin;C:\Windowssystem32;C:\Qhov rais;C:/Qhov kev pab cuam ntaub ntawv/Java/jre7/rau hauv/kev;C:/Qhov kev pab cuam ntaub ntawv/Java/jre7/rau hauv;C:/Qhov kev pab cuam ntaub ntawv/Java/jre7/lib/i386;C:\Windowssystem32;C:\Qhov rais;C:\WindowsSystem32Wbem;C:\WindowsSystem32WindowsPowerShellv1.0;C:\Qhov kev pab cuam FilesJavajdk1.6.0_10bin;E:\apache-ant-1.8.2-binapache-ant-1.8.2bin;C:\Kev FilesLiquid TechnologiesLiquid XML Studio 2011XmlDataBinder9Redist9cppwin32bin;C:\Qhov kev pab cuam FilesTortoiseSVNbin;E:\Qhov kev pab cuam FilesAndroidandroid-sdkplatform-cuab yeej;E:\Qhov kev pab cuam FilesAndroidandroid-sdktools;C:\Qhov kev pab cuam FilesQuickTimeQTSystem;D:\SunAppServerbin;9;F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipse;;.”/><lub npe ntawm tus kheej =”java.vendor.url” tus nqi =”http://java.oracle.com/”/><lub npe ntawm tus kheej =”java.vm.vendor” tus nqi =”Oracle Corporation”/><lub npe ntawm tus kheej =”java.runtime.name” tus nqi =”Java(QHIA NTXIV TXOG) SE Runtime ib puag ncig”/><lub npe ntawm tus kheej =”Sun.java.command” tus nqi =”org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner com.home.junit.SampleAddTest filtertrace = haltOnError tseeb = haltOnFailure cuav = tseeb formatter=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter showoutput = outputtoformatters cuav = tiag logfailedtests = logtestlistenerevents tiag = formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter cuav,F:\WorkRnDSpaceJunittestreportTEST-com.Home.junit.SampleAddTest.xml crashfile = F:\WorkRnDSpaceJunitjunitvmwatcher6288340937110531134.properties propsfile = F:\WorkRnDSpaceJunitjunit7583515827572177542.properties”/><lub npe ntawm tus kheej =”java.class.path” tus nqi =”F:\WorkRnDSpaceJunitlibjunit-4.11.jar;F:\WorkRnDSpaceJunitlibhamcrest-Core-1.3.jar;F:\WorkRnDSpaceJunitbin;F:\WorkRnDSpaceJunitbintests;F:\WorkRnDSpaceJunit;C:\Qhov kev pab cuam FilesJavajdk1.6.0_10jrelibrt.jar;F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300libant-launcher.jar;F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300libant.jar;F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300libant-junit.jar;F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300libant-junit4.jar”/><lub npe ntawm tus kheej =”ant.Version” tus nqi =”Apache ntsaum(QHIA NTXIV TXOG) Version 1.8.2 compiled rau hlis ntuj nqeg 20 2010″/><lub npe ntawm tus kheej =”java.vm.specification.name” tus nqi =”Java tshuab Virtual Specification”/><lub npe ntawm tus kheej =”java.vm.specification.Version” tus nqi =”1.7″/><lub npe ntawm tus kheej =”Sun.cpu.endian” tus nqi =”me ntsis”/><lub npe ntawm tus kheej =”Sun.os.patch.level” tus nqi =”Service pob 1″/><lub npe ntawm tus kheej =”eclipse.pdebuild.Home” tus nqi =”/F:/Utpal/Softs/Softs/eclipse-java-indigo-win32/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/./”/><lub npe ntawm tus kheej =”java.io.tmpdir” tus nqi =”C:\UsersutpalbAppDataLocalTemp”/><lub npe ntawm tus kheej =”java.vendor.url.bug” tus nqi =”http://bugreport.Sun.com/bugreport/”/><lub npe ntawm tus kheej =”os.Arch” tus nqi =”x 86″/><lub npe ntawm tus kheej =”java.awt.graphicsenv” tus nqi =”sun.awt.Win32GraphicsEnvironment”/><lub npe ntawm tus kheej =”java.Ext.dirs” tus nqi =”C:\Qhov kev pab cuam FilesJavajre7libext;C:\WindowsSunJavalibext”/><lub npe ntawm tus kheej =”user.dir” tus nqi =”F:\WorkRnDSpaceJunitbuild”/><lub npe ntawm tus kheej =”build.test.dir” tus nqi =”F:\WorkRnDSpaceJunitbintests”/><lub npe ntawm tus kheej =”line.separator” tus nqi =” “/><lub npe ntawm tus kheej =”java.vm.name” tus nqi =”Java HotSpot(QHIA NTXIV TXOG) Nyob hauv kev pab VM”/><lub npe ntawm tus kheej =”basedir” tus nqi =”F:\WorkRnDSpaceJunit”/><lub npe ntawm tus kheej =”ant.java.Version” tus nqi =”1.7″/><lub npe ntawm tus kheej =”ant.Core.lib” tus nqi =”F:\UtpalSoftsSoftseclipse-java-indigo-win32eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300libant.jar”/><lub npe ntawm tus kheej =”File.encoding” tus nqi =”Cp1252″/><lub npe ntawm tus kheej =”java.specification.Version” tus nqi =”1.7″/><lub npe ntawm tus kheej =”src.dir” tus nqi =”F:\WorkRnDSpaceJunitsrc”/><lub npe ntawm tus kheej =”ant.Project.invoked-le lub hom phaj” tus nqi =”ntsiab”/></khoom><lub sij hawm testcase =”0.003″ lub npe =”testAdd” classname =”com.home.junit.SampleAddTest”/>-<lawv tawm>

<![CDATA[]]>

</lawv tawm>-<ua yuam kev lawv>

<![CDATA[]]>

</ua yuam kev lawv></testsuite>

Xaus: Ces tom qab tawm tswv yim txog tag nrho cov saum toj no ziag thiab siv lus peb yuav xaus nrog lub qab highlights.

  • APACHE NTSAUM yog ib java raws dej siv lub Java developers rau qhov laj thawj nram no
    • Yuav ua kom muaj tus binaries ntawm lub qhov chaws
    • Meskas javadocs rau ntawm qhov chaws
    • Khiav JUNIT mus tus neeg mob nyob ib qhov chaws puag
  • NTSAUM nrog JUNIT, pab java developers raws nraim li lub xeem uas tau tsav Development vib this

Vam tias koj muaj enjoyed tsab xov xwm thiab tau txais ib tug to taub txog lub cuab tam thiab yuav siv nws cov. Yog hais tias koj muaj tej lus nug, xa kuv ib tug ntawv thiab kuv xav hlub los teb koj queries.

 

Tagged: ,
============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share