2016-02-17 36 views
0

我有一個類MyClass,它包含一個調用接口MyInterface的構造函數。 MyInterface包含接受IntString的方法validator使用EasyMock來模擬接受參數的接口

我需要在JUnit測試中使用EasyMock來模擬MyInterface.validator的返回Boolean值。

我已經做了幾次嘗試,我只是在嘗試從MyClass調用MyInterface.validator時纔得到Java異常。

public class MyClass { 

public MyInterface myInterface; 
public int test; 

public MyClass (int INT, String STRING, MyInterface myInterface) { 

    this.myInterface = myInterface; 
    this.test = INT; 
    myInterface.validator(INT, STRING); 

} 
} 

public interface MyInterface { 
public Boolean validator(int INT, String STRING); 
} 

public class MyClassTest { 
MyInterface mockMyInterface; 
MyClass myClass; 

@Before 
public void setUp() throws Exception { 
    mockMyInterface = createMock(MyInterface.class); 
} 

@Test 
public void test() { 
    myClass = new MyClass(10, "Test", mockMyInterface); 
    expect(mockMyInterface.validator(10, "Test")).andStubReturn(true); 
    replay(mockMyInterface); 
    assertEquals(myClass.test, 10); 
    verify(mockMyInterface); 
} 
} 

回答

0

您必須在使用之前配置的模擬期望。你的構造函數調用模擬器,所以你應該在創建MyClass的實例之前配置它。

試試這個:

public class MyClassTest { 
    MyInterface mockMyInterface; 
    MyClass myClass; 

    @Before 
    public void setUp() throws Exception { 
     mockMyInterface = createMock(MyInterface.class); 
    } 

    @Test 
    public void test() { 
    expect(mockMyInterface.validator(10, "Test")).andStubReturn(true); 
    replay(mockMyInterface); 

    myClass = new MyClass(10, "Test", mockMyInterface);  

    assertEquals(myClass.test, 10); 
    verify(mockMyInterface); 
    } 
} 
相關問題