2014-10-10 3 views
3

메소드의 멱등환을 테스트해야합니다.junit으로 메소드의 멱등 원을 테스트하려면 어떻게해야합니까?

우리는 내가 다음과 같은 방법으로 Person 클래스가 있다고 가정하자 :

public String doSomething(String a){ 
//do some stuff 
personDao.delete(a) 
} 

하고 삭제하기 전에 당신이 방법 해봐요를 호출 다음 번에이 같은 결과를 만들 것입니다 뭔가가 잘못되면 테스트해야 처음 제대로 돌아 왔을 때를 원했습니다. 이는 예를 들어 해당 메소드를 호출하지만 스크립트를 중지하여 실패하는 스크립트를 실행할 때 발생할 수 있습니다. 다음 번에 스크립트를 실행하면 실패없이 동일한 결과가 나타납니다.

단위 테스트에서 이것을 수행 할 수 있습니까?

미리 감사드립니다.

답변

3

테스트는 방법을 두 번 실행해야합니다. 결과/결과는 두 경우 모두 동일해야합니다. 정말 간단합니다.

의사 코드 :

setupException(); 
doSomething(a); 
assertOutcome(); 
doSomething(a); 
assertOutcome(); 
+0

하지만 삭제 전 예외를 시뮬레이트해야합니다. 삭제로 인해 ID가있는 데이터베이스 레코드가 삭제되고 일부 물건 영역에서 무언가가 깨질 수 있기 때문에 – user1345883

+0

그게 setup() 메소드입니다. 예외를 설정하십시오. – Stewart

1

그래서 대답의 첫 번째 부분은 DAO에 대한 모의를 사용하는 것입니다. 두 번 테스트를 작성하십시오. 하나는 메소드가 두 번 호출되고 DAO는 예외를 발생시키지 않습니다. DAO가 첫 번째 호출에서 예외를 throw하는 다른 곳.

이 두 경우의 예상되는 동작은 DAO에 따라 다릅니다. 이미 삭제 된 값에 대해 DAO에서 delete으로 전화해도됩니까? 그렇다면 위대합니다. 두 번 전화가 올 것 같네요. 그렇지 않다면 상태를 확인하는 논리가 필요합니다.