如何模拟Spring中私有方法中调用的公共方法的返回

时间:2013-09-05 15:47:12

标签: java spring unit-testing junit mockito

我在一个刚刚实现的类中有一个名为getSubject的私有方法。我正在尝试对私有方法执行单元测试但我的问题是私有方法getSubject正在调用另一个方法getSubjectOracle()(注意:getSubjectOracle是jar中的公共方法file)返回String主题。 pseoudocode如下所示:

public class Service{

    private oracleDao

    //setter for oracle dao avilable


    private String getSubject(String id,Stringountry){

        String subject = oracleDao.getSubjectOracle(String id,String country)

        return subject;

    }

}

我知道如何模拟方法oracleDao.getSubjectOracle(String id,String country)的返回以便对方法getSubject(String id, String country)进行单元测试吗?

我在网上搜索了有用的资源但无法获得任何资源。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您要测试Service,那么您还必须模拟oracleDao并使其getSubjectOracle()方法返回您想要的字符串。

我假设您没有测试getSubject(),而是调用getSubject()的方法。

答案 1 :(得分:1)

一种方法是为oracleDao编写一个setter。在那里你可以设置模拟而不是真实的东西。例如,写你自己的oracleDao做你想要的。 在@Before方法中,您将注入模拟oracleDao。

使用像Mockito这样的框架,这一切都更好。它看起来像这样:

@Mock
YourDaoThing mock;

@Before
public setUp(){
  MockitoAnnotation.initMocks(this);
  service = new Service();
  service.setDao(mock);
}

@Test
public testGetSubject(){
  String someString = "whatever";
  when(mock.getSubjectOracle(id,country)).thenReturn(someString)

  assertEquals(expect, service.callToTheMethodYouTest())

}