模拟实例void方法无需调用' expectLastCall'方法

时间:2017-05-05 04:22:38

标签: java junit powermock easymock

我刚刚编写了示例测试用例,我想在其中模拟一个void实例方法。我很惊讶,我的测试用例是在没有调用expectLastCall方法的情况下传递的。我想知道,在模拟实例void方法时,是否需要调用expectLastCall?

StringUtil.java

package com.sample.util;

import com.sample.model.MethodNotImplementedException;

public class StringUtil {
    public String toUpperAndRepeatStringTwice(String str) {
        String upperCase = str.toUpperCase();
        sendStringToLogger(upperCase);
        return upperCase + upperCase;
    }

    public void sendStringToLogger(String str){
        throw new MethodNotImplementedException();
    }
}

StringUtilTest.java

package com.sample.util;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({ StringUtil.class })
public class StringUtilTest {

    @Test
    public void toUpperAndRepeatStringTwice() {
        StringUtil stringUtil = PowerMock.createPartialMock(StringUtil.class, "sendStringToLogger");

        String str = "HELLO PTR";
        stringUtil.sendStringToLogger(str);
        //PowerMock.expectLastCall().times(1);
        PowerMock.replayAll();

        String result = stringUtil.toUpperAndRepeatStringTwice("hello ptr");

        assertEquals(result, "HELLO PTRHELLO PTR");
    }
}

1 个答案:

答案 0 :(得分:4)

expectLastCall不是必需的。对于EasyMock和PowerMock层也是如此。所以你是对的。

它用于某些用户的清晰度。因为很明显以前的方法是期望而不是随机调用。但这更像是一种风格问题,而不是一种要求。

您也不需要time(1),因为它是默认设置。

顺便说一下,答案here是错误的,我也相应地对此进行了评论。