Junit测试方法,不返回任何内容,并对其他系统进行服务调用

时间:2015-03-10 01:26:43

标签: java unit-testing junit void

我有一个跟随的方法。

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对此方法进行单元测试。

1 个答案:

答案 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这样的模拟框架可以解决这个问题。