본문 바로가기

나는개발자다/기타

Java JUnit를 이용 객체 비교하기.

DB에서 데이터를 가져와서 생성한  product.java 클래스와 임의로 만든 product.java를  객체 비교 하려 한다.


  • 일단 class 정의
class Product{
private String name;
private String id; 

private String setName(Stirng name){
this.name = name;

private String setID(String id){
this.id = id; 
}
}


  • 객체생성
Product  dbProduct = new Product();
Product  tempProduct = new Protuct();

dbProtuct.setName("a");
dbProtuct.setID("id");

tempProduct.setName("a);
tempProduct.setID("id");

dbProduct와 tempProduct에 있는 변수 name과 id의 값은 동일한다.



처음 아이디어는  
toString() 메소드를 재정의 해서 String 비교하는 방법을 사용하였다.
 public String toString(){
return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
} 


** ToStringStyle.MULTI_LINE_STYLE 은 아래 하단 주소 참조
 http://mikyung.net/category/Program?page=2 



JUnit 에서 
 assertEquals(dbProduct.toString().equalsIgnoreCase(tempProduct.toString())를 한 결과 false가 나온다.



따라서 다른 방법으로 변경
equals를 재 정의하로 하였다.
}
 public boolen  equals(Object obj){
           return EqualsBuilder.reflectionEquals(this, obj);



 JUnit에서
assertEquals(dbProtuct.equals(
tempProduct), true)   
Test 통과이다.


참고로 EqualsBuilder, StringBuilder는 
apache project에 있는 commons-lang.jar 파일에 있다.
common-lang download 주소
http://commons.apache.org/lang/download_lang.cgi   



완전한 소스 코드이다. 

 
package kr.or.jhpark;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

class Product{
private String name;
private String id; 

public void setName(String name){
this.name = name;
public  void setID(String id){
this.id = id; 
}
public boolean equals(Object pObject) {
return EqualsBuilder.reflectionEquals(this, pObject);
public String toString(){
return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
}
 
 
 
되도록이면 toString()를 재정의 하도록 하는게 좋다.
이렇게 toString()를 재정의하고 System.out.print를 하게 되면

kr.or.jhpark.Product@18f9b75[
  id=48
  name=박재혁
]
이런 식으로 알기 쉽게 데이터를 뿌려준다.


toString() 메소드 재정의 편하게 하기.
  // 디폴트
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

//simple style
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE);
}

// multi line style
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}


참고할 중요 내용.
불필요한 코딩을 줄이자.
https://www.ibm.com/developerworks/kr/library/tutorial/j-lessismore/