我有一个跟随的方法。
public void callService(SomeObject someObject) {
// call helper class method and create a request XML
// scrub this XML using a local method and persist it in MongoDB
// call a 3rd party service using HTTP POST
// Recieve the response
// Persist the response in MongoDB and set in in somObject
// return
}
现在作为开发的一部分,我们必须为此方法编写单元测试用例。我是Junit测试以及模拟对象的新手。但当我用Google搜索并查看其他一些类似的问题时,我才明白测试void方法与普通方法略有不同,我认为我的上述方法特别以某种方式特殊,因为我对于什么以及如何测试这个方法一无所知方法
有人可以给我指针或任何参考我如何使用Junit对此方法进行单元测试。
答案 0 :(得分:0)
您可能希望使用模拟代表您的Mongo连接和第三方服务。使用现有的模拟框架最简单,但这是一般概念。
假设您通过构建StuffToPost
对象并将其传递到post
上的ThirdPartyPoster
方法来发布此第三方服务。然后,您可以按如下方式创建模拟对象:
public class MockThirdPartyPoster implements ThirdPartyPoster {
private int count = 0;
private StuffToPost stuffToPost;
@Override
public void post(StuffToPost stuffToPost) {
this.count++;
this.stuffToPost = stuffToPost;
}
public int getCount() {
return count;
}
public StuffToPost getStuffToPost() {
return stuffToPost;
}
}
在测试中,您构建此MockThirdPartyPoster
并将其传递给thingToTest.setThirdPartyPoster
,然后调用您的方法。方法完成后,您可以在模拟上调用getCount()
以确保您只发布一次,然后调用getStuffToPost()
来检查StuffToPost
对象,并确保它是正确。你也可以为Mongo持久性做类似的事情。
这需要大量的样板;像Mockito或EasyMock这样的模拟框架可以解决这个问题。