2017-05-03 2 views
1

다음 클래스에 대한 JUnit 테스트를 만들어야하지만 deposit 메서드에 대한 테스트를 수행 할 수 없습니다.void 메서드를 사용하여 Junit 테스트

public int getBalance(){ 
     return balance; 
    } 

을 그리고 주장을 할 그것을 사용 :

public class Account { 
    private int balance; 
    private float Interest_Rate =10; 

    public Account() { 
     this.balance = 0; 
    } 
    public void deposit(int amount) {  
     balance = balance+amount; 
    } 
} 

@Test 
public void testdeposit() { 
    Account i = new Account(); 
    assertEquals("Result",75,i.deposit(25)); 
} 
+1

만들기 마지막으로 다음

@Before public void setUpStreams() { System.setOut(new PrintStream(outContent)); } @After public void cleanUpStreams() { System.setOut(null); } 

잔액에 액세스하는 get 메소드. 통화 전 및 후에 예금을 주장하십시오. – Compass

+0

그리고 귀하의 질문은 ... –

+0

코드가 실행되지 않을 것이라고 쓴 코드는 "assertEquals"에서 오류가 발생합니다. 메서드 보증금이 무효로 반환되므로 어떻게 작동합니까? –

답변

2

당신은 Account 클래스의 getBalance() 방법을 추가 할 수

@Test 
public void deposit(){ 
    Account i = new Account(); 
    i.deposit(25) 
    assertEquals("Result",25, i.getBalance()); 
} 

는 일반적으로 단지 단위 테스트 동안 사용되는 방법을 추가

평가되고 논의 될 수있다.
하지만 여기서는 getBalance()이 불가 피한 것으로 표시됩니다.

0

개인 필드/메소드 테스트에는 의미가 없습니다.

귀하의 경우 balance은 '쓰기 전용'변수입니다. (위 작성된)는 공공 접근을해야한다, 또는 필드 테스트가 같아야이 경우

public int income() { 
    if(balance == 0) return 0; 
    if(balance < 100) return 10; 
    if(balance < 1000) return 15; 
    return 20; 
} 

같은 다른 방법을 사용해야합니다

@Test 
public void deposit(){ 
    Account acc = new Account(); 
    acc.deposit(150); 
    assertEquals("Result ", 15, acc.income()); 
} 

가 구현을 테스트하지 마십시오 테스트 인터페이스.

0

당신은 방법에에서 System.out.println이 표준 출력을 요청하기 위해 JUnit 테스트를 말할 수 :

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 

assertEquals(<here goes your expected string>, outContent.toString());