2017-04-26 16 views
0

JMockit 1.31을 처음 사용합니다. JMockit을 사용하여 다음 코드에 대한 단위 테스트 스크립트를 작성하려고하지만 어설 션 오류가 발생했습니다. 문제를 찾아 내도록 도와주세요.JMockit을 사용하여 비 정적 메소드 모의 1.31

Main 클래스 : ForUnit.java

public class ForUnit { 
    private UnitHelper unit = new UnitHelper(); 

    public int add() { 
     return unit.getNumberA() + unit.getNumberB(); 
    } 

    public int subtract() { 
     UnitHelper unit = new UnitHelper(); 
     return unit.getNumberA() - unit.getNumberB(); 
    } 

    public int subtractFromThird() { 

     return unit.getNumberA() - unit.getNumberB() + 10; 
    } 
} 

종속 클래스 : UnitHelper

public class UnitHelper { 
    private int a = 200; 
    private int b = 100; 

    public int getNumberA() { 
     return a; 
    } 

    public int getNumberB() { 
     return b; 
    } 
} 

단위 테스트 스크립트를 사용하여 JMockit - ForUnitTest.java

public class ForUnitTest { 

    private final int i =10, j=8; 

    @Tested 
    private ForUnit forUnit; 

    @Test 
    public void test() { 

     final UnitHelper helper = new UnitHelper(); 

     new Expectations() {{ 
      helper.getNumberA(); result = i; 
      helper.getNumberB(); result = j; 
     }}; 

     assertEquals(i+j, forUnit.add()); 
    } 

} 

답변

1

시험 방법에 ForUnit 클래스에서 사용되지 않은 UnitHelper을 새로 만듭니다.

ForUnit에 동작을 조롱 할 수 있도록 UnitHelper을 삽입하는 방법이 필요합니다.

public class ForUnit { 
    private UnitHelper unit = new UnitHelper(); 
    public ForUnit(UnitHelper unitHelper) { 
    this.unit = unitHelper; 
    } 
    ... 
} 

을 그리고 테스트에 당신은 helper 개체를 삽입 할 수 있습니다

당신은이 일을 시도 할 수 있습니다.

@Test 
public void test() { 
    final UnitHelper helper = new UnitHelper(); 
    forUnit = new ForUnit(helper); 
    new Expectations() {{ 
     helper.getNumberA(); result = i; 
     helper.getNumberB(); result = j; 
    }}; 
    assertEquals(i+j, forUnit.add()); 
    } 

UPDATE : 새 생성자를 만들지 않도록하려면

. setter 메서드를 사용할 수 있습니다.

public class ForUnit { 
    private UnitHelper unit = new UnitHelper(); 
    setUnitHelper(UnitHelper unit) { 
     this.unit = unit; 
    } 
} 
+0

Alayor. 생성자를 추가하는 대신 더 이상의 옵션이 있습니까? –

+0

'package' 가시성을 가진 setter 메소드를 추가 할 수 있습니다. – alayor

+0

예, 분명히 setters/constructors를 사용할 수 있습니다. 그러나 다른 해결책이 있습니까? –