테스트 구동 내 현금 시스템 개발

4508 단어 작업JUnit
본고는 나의 현금 시스템을 예로 삼아 어떻게 테스트 구동으로 개발하는지 소개한다.
주로 화폐 환율의 다른 전환으로 소개한다.
FM: 1달러 = 2 프랑
1 즉, 5달러 + 10프랑 = 10달러
이때 우리는 업무 순서를 표시하기 위해 계획 명세서를 작성해야 한다.이렇게 하나하나 문제를 해결하면, 업무는 신속하게 완성되고 있다.
우리는 개발 과정에서 먼저 대상을 구축하는 모델을 바꿔야 한다. 먼저 대상을 구축하는 것이 아니라 먼저 테스트를 구축하는 것이다.우선 시간의 가장 간단한 곱셈.
public void testChengfa(){
		Dollar five = new Dollar(5);
		five.times(2);
		assertEquals(10,five.amount);
	}

 
왜 이렇게 하는지 우리는 5달러*2=10달러를 알아야 한다. 위의 공식에 호응하기 위해서 우리는 한 걸음 한 걸음 실현해야 한다.
package com.mixian.first_two;

public class Dollar {

	int amount;

	public Dollar(int amount) {
		this.amount = amount;
	}

	public void times(int time) {
		amount*=time;
		//amount = this.amount*time;
	}

}

 
한 걸음 한 걸음 amount=10을 실현한다.amount=5*2; amount=amount*time;amount*=time;
 
2: 테스트 개발 구동과 상대적으로 체계 구조 구동(깔끔하고 사용 가능한 코드를 얻기 위해)
우리가 Dollar를 조작할 때 이 대상이 바뀌었다
 
public void testChengfa(){
		Dollar five = new Dollar(5);
		five.times(2);
		assertEquals(10,five.amount);
		five.times(3);
		assertEquals(15,five.amount);
	}

결과는 주니트.framework.AssertionFailedError: expected:<15> but was:<30>
3: 수치 대상: 대상을 수치로 사용할 수 있으며, 수치 대상의 실례 변수 값이 구조 함수에 지정되어 이후에도 변할 수 없도록 요구한다.5달러짜리 2개 대상, 한 대상에 의해 다른 대상이 바뀌지 않으며, 7달러가 필요하면 하나를 다시 만들어야 한다.
4: 동일성 테스트
public void testEquals(){  assertTrue(new Dollar(5).equals(new Dollar(5))); }
public boolean equals(Object object){  Dollar dollar = (Dollar)object;  return amount==dollar.amount; }
5:dollar 객체 간 비교
public void testChengfa() {Dollar five = new Dollar(5);/* 왜 10 five.times(2)가 아닌지, assertEquals(10,five.amount);*//만약 우리가 times에서 새로운 대상을 되돌릴 때, 나는 원래의 Dollar 대상에 대해 조작할 수 있다//Dollar product =five.times(2);/assertEquals(10,product.amount);assertEquals(10,product.amount);Assert Equals(Dollar 10,times),);  //product = five.times(3);  //assertEquals(15,product.amount);  assertEquals(new Dollar(15),five.times(3));  //five.times(3);  //assertEquals(15,five.amount); }
 
소결: 이상은 달러 대상의 곱셈 연산과 대상 간의 판정 등을 완성했다. 다음은 프랑의 곱셈과 판정 등을 실현해야만 두 대상 간의 혼합 조작에 기반을 다질 수 있다.
 
1:package com.mixian.first_two;
public class Fancs { private int amount;  Fancs(int amount){  this.amount = amount; }  public Fancs times(int time){  return new Fancs(amount*time); }  public boolean equals(Object object){  Fancs fancs = (Fancs)object;  return amount==fancs.amount;} 프랑 대상의 조작은 equals 방법을 복사하는 것을 잊지 마십시오
2: 현재 상황에서 두 대상 중 많은 동일한 종류가 발견되었기 때문에 우리는 그들의 부류를 찾아야 한다.
변수를 위로 이동하고 equals의 클래스를money로 바꿉니다
package com.mixian.first_two;

public class Dollar extends Money{

	//private int amount;

	public Dollar(int amount) {
		super.amount = amount;
		//System.out.println(this.amount);
	}

	public Dollar times(int time) {
		//amount*=time;
		//amount = this.amount*time;
		//System.out.println(amount*time);
		return new Dollar(amount*time);
	}
	
	public boolean equals(Object object){
		Money money = (Money)object;
		return amount==money.amount;
	}

}
package com.mixian.first_two;

public class Money {
	protected int amount;
}

그리고 equals 방법을 Money 클래스로 옮깁니다
이때 단언을 추가합니다.
:assertFalse(new Dollar(5).equals(new Fancs(5)));
그들이 똑같은 대상이라는 것을 반납하면 문제가 나온다. 우리는 두 대상의 차이를 나타낼 필요가 있다.
즉, 두 종류의 수치가 같고 같은 종류를 판단해야 한다는 것이다.
amount==money.amount && getClass()==money.getClass();
테스트가 통과되었다.
3:이제 타임즈() 방법을 써서 통일적으로 계산할 수 있다
Money 클래스에 Dollar 객체를 반환하는 플랜트 방법 도입
Money four = Money.dollar(4);  //assert(new Dollar(4).equals(four));  assertEquals(new Dollar(10),four.times(2));  assertEquals(new Dollar(15),four.times(3));  
 
public abstract class Money { protected int amount; abstract Object times(int i) ; 
Money 클래스에서 times 방법이 실현되지 않았기 때문에 times 방법을 추상적인 방법으로 정의할 수 있습니다
 
4: 테스트를 변경하고 정적 방법을 설정합니다.
  assertEquals(Money.dollar(10),four.times(2));  assertEquals(Money.dollar(15),four.times(3));
  static Money dollar(int amount){  return new Dollar(amount); }
 static Money fancs(int amount){  return new Fancs(amount); }
 
5: 문자열에 따라 다르게 만드는 방법
 
 
 
 

좋은 웹페이지 즐겨찾기