JUnit单元测试覆盖率Word下载.docx
《JUnit单元测试覆盖率Word下载.docx》由会员分享,可在线阅读,更多相关《JUnit单元测试覆盖率Word下载.docx(24页珍藏版)》请在冰点文库上搜索。
![JUnit单元测试覆盖率Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/baa7bf23-400f-4047-b8a8-8b549e9fd2d1/baa7bf23-400f-4047-b8a8-8b549e9fd2d11.gif)
publicinterfaceIMoney{
/**
*Addsamoneytothismoney.
*/
publicabstractIMoneyadd(IMoneym);
*AddsasimpleMoneytothismoney.Thisisahelpermethodfor
*implementingdoubledispatch
publicabstractIMoneyaddMoney(Moneym);
*AddsaMoneyBagtothismoney.Thisisahelpermethodfor
publicabstractIMoneyaddMoneyBag(MoneyBags);
*Testswhetherthismoneyiszero
publicabstractbooleanisZero();
*Multipliesamoneybythegivenfactor.
publicabstractIMoneymultiply(intfactor);
*Negatesthismoney.
publicabstractIMoneynegate();
*Subtractsamoneyfromthismoney.
publicabstractIMoneysubtract(IMoneym);
*AppendthistoaMoneyBagm.
publicabstractvoidappendTo(MoneyBagm);
}
这里我们定义一个java接口,表示了“金钱”这个神奇东西的一些美妙的抽象方法!
早年有首迟志强的歌叫《钞票》:
是谁制造的钞票,你在世上逞霸道,有人为你愁眉苦脸啊有人为你哈哈笑;
姑娘为你走错了路,小伙子为你受改造!
东奔又西跑,点头又哈腰,钞票!
人人为你离不了钱哪!
你这杀人不见血的刀…形象无比,不扯了,跑题啦!
Iamback!
之后我们实现这个接口,在src文件夹下定义一个叫做Money.java的类:
publicclassMoneyimplementsIMoney{
privateintfAmount;
privateStringfCurrency;
*Constructsamoneyfromthegivenamountandcurrency.
publicMoney(intamount,Stringcurrency){
fAmount=amount;
fCurrency=currency;
*Addsamoneytothismoney.ForwardstherequesttotheaddMoneyhelper.
publicIMoneyadd(IMoneym){
returnm.addMoney(this);
publicIMoneyaddMoney(Moneym){
if(m.currency().equals(currency()))
returnnewMoney(amount()+m.amount(),currency());
returnMoneyBag.create(this,m);
publicIMoneyaddMoneyBag(MoneyBags){
returns.addMoney(this);
publicintamount(){
returnfAmount;
publicStringcurrency(){
returnfCurrency;
publicbooleanequals(ObjectanObject){
if(isZero())
if(anObjectinstanceofIMoney)
return((IMoney)anObject).isZero();
if(anObjectinstanceofMoney){
MoneyaMoney=(Money)anObject;
returnaMoney.currency().equals(currency())
&
&
amount()==aMoney.amount();
returnfalse;
publicinthashCode(){
returnfCurrency.hashCode()+fAmount;
publicbooleanisZero(){
returnamount()==0;
publicIMoneymultiply(intfactor){
returnnewMoney(amount()*factor,currency());
publicIMoneynegate(){
returnnewMoney(-amount(),currency());
publicIMoneysubtract(IMoneym){
returnadd(m.negate());
publicStringtoString(){
StringBufferbuffer=newStringBuffer();
buffer.append("
["
+amount()+"
"
+currency()+"
]"
);
returnbuffer.toString();
public/*thismakesnosense*/voidappendTo(MoneyBagm){
m.appendMoney(this);
这个接口实现了IMoney接口的方法,具体语法就不讲了,很简单!
之后,我们又用另一个类实现IMoney接口,为什么呢?
你可以认为我贪心,但你不可以这么说,因为喜欢编程的人绝对不是为了贪婪代码!
我们在src下建立另一个类MoneyBag.java:
importjava.util.*;
classMoneyBagimplementsIMoney{
privateVectorfMonies=newVector(5);
staticIMoneycreate(IMoneym1,IMoneym2){
MoneyBagresult=newMoneyBag();
m1.appendTo(result);
m2.appendTo(result);
returnresult.simplify();
returnm.addMoneyBag(this);
returnMoneyBag.create(m,this);
returnMoneyBag.create(s,this);
voidappendBag(MoneyBagaBag){
for(Enumeratione=aBag.fMonies.elements();
e.hasMoreElements();
)
appendMoney((Money)e.nextElement());
voidappendMoney(MoneyaMoney){
if(aMoney.isZero())return;
IMoneyold=findMoney(aMoney.currency());
if(old==null){
fMonies.addElement(aMoney);
return;
fMonies.removeElement(old);
IMoneysum=old.add(aMoney);
if(sum.isZero())
fMonies.addElement(sum);
if(anObjectinstanceofMoneyBag){
MoneyBagaMoneyBag=(MoneyBag)anObject;
if(aMoneyBag.fMonies.size()!
=fMonies.size())
for(Enumeratione=fMonies.elements();
){
Moneym=(Money)e.nextElement();
if(!
aMoneyBag.contains(m))
returntrue;
privateMoneyfindMoney(Stringcurrency){
if(m.currency().equals(currency))
returnm;
returnnull;
privatebooleancontains(Moneym){
Moneyfound=findMoney(m.currency());
if(found==null)returnfalse;
returnfound.amount()==m.amount();
inthash=0;
Objectm=e.nextElement();
hash^=m.hashCode();
returnhash;
returnfMonies.size()==0;
if(factor!
=0){
result.appendMoney((Money)m.multiply(factor));
returnresult;
result.appendMoney((Money)m.negate());
privateIMoneysimplify(){
if(fMonies.size()==1)
return(IMoney)fMonies.elements().nextElement();
returnthis;
{"
buffer.append(e.nextElement());
}"
publicvoidappendTo(MoneyBagm){
m.appendBag(this);
之后,我们创建一个junit测试代码MoneyTest.java,来测试Money.java和MoneyBag.java类,这里我也把它放在src目录下;
如果企业应用,你就要把目录分析的详细些,例如src子目录下放所有的java源代码,test子目录下放所有的junit测试代码:
importjunit.framework.*;
publicclassMoneyTestextendsTestCase{
privateMoneyf12CHF;
privateMoneyf14CHF;
privateMoneyf7USD;
privateMoneyf21USD;
privateIMoneyfMB1;
privateIMoneyfMB2;
publicstaticvoidmain(Stringargs[]){
junit.textui.TestRunner.run(MoneyTest.class);
protectedvoidsetUp(){
f12CHF=newMoney(12,"
CHF"
f14CHF=newMoney(14,"
f7USD=newMoney(7,"
USD"
f21USD=newMoney(21,"
fMB1=MoneyBag.create(f12CHF,f7USD);
fMB2=MoneyBag.create(f14CHF,f21USD);
publicvoidtestBagMultiply(){
//{[12CHF][7USD]}*2=={[24CHF][14USD]}
IMoneyexpected=MoneyBag.create(newMoney(24,"
),newMoney(14,"
));
assertEquals(expected,fMB1.multiply
(2));
assertEquals(fMB1,fMB1.multiply
(1));
assertTrue(fMB1.multiply(0).isZero());
publicvoidtestBagNegate(){
//{[12CHF][7USD]}negate=={[-12CHF][-7USD]}
IMoneyexpected=MoneyBag.create(newMoney(-12,"
),newMoney(-7,"
assertEquals(expected,fMB1.negate());
publicvoidtestBagSimpleAdd(){
//{[12CHF][7USD]}+[14CHF]=={[26CHF][7USD]}
IMoneyexpected=MoneyBag.create(newMoney(26,"
),newMoney(7,"
assertEquals(expected,fMB1.add(f14CHF));
publicvoidtestBagSubtract(){
//{[12CHF][7USD]}-{[14CHF][21USD]=={[-2CHF][-14USD]}
IMoneyexpected=MoneyBag.create(newMoney(-2,"
),newMoney(-14,"
assertEquals(expected,fMB1.subtract(fMB2));
publicvoidtestBagSumAdd(){
//{[12CHF][7USD]}+{[14CHF][21USD]}=={[26CHF][28USD]}
),newMoney(28,"
assertEquals(expected,fMB1.add(fMB2));
publicvoidtestIsZero(){
assertTrue(fMB1.subtract(fMB1).isZero());
assertTrue(MoneyBag.create(newMoney(0,"
),newMoney(0,"
)).isZero());
publicvoidtestMixedSimpleAdd(){
//[12CHF]+[7USD]=={[12CHF][7USD]}
IMoneyexpected=MoneyBag.create(f12CHF,f7USD);
assertEquals(expected,f12CHF.add(f7USD));
publicvoidtestBagNotEquals(){
IMoneybag=MoneyBag.create(f12CHF,f7USD);
assertFalse(bag.equals(newMoney(12,"
DEM"
).add(f7USD)));
publicvoidtestMoneyBagEquals(){
assertTrue(!
fMB1.equals(null));
assertEquals(fMB1,fMB1);
IMoneyequal=MoneyBag.create(newMoney(12,"
assertTrue(fMB1.equals(equal));
fMB1.equals(f12CHF));
f12CHF.equals(fMB1));
fMB1.equals(fMB2));
publicvoidtestMoneyBagHash(){
assertEquals(fMB1.hashCode(),equal.hashCode());
publicvoidtestMoneyEquals(){
f12CHF.equals(null));
MoneyequalMoney=newM