【问题标题】:NullPointerException in while doing mockito unit test在进行模拟单元测试时出现 NullPointerException
【发布时间】:2016-04-04 07:32:35
【问题描述】:

我是 mockito Junit 测试的新手。这是我要测试的主要课程: 导入 java.math.BigInteger; 导入 java.security.MessageDigest; 导入 java.security.NoSuchAlgorithmException; 导入 org.apache.commons.lang.StringUtils; 导入 org.apache.log4j.Logger; 导入 org.springframework.stereotype.Component;

@Component
public class IlinqChecksumCalculator {

    private static Logger DATA_LOADER_CHECKSUM_CALCULATOR_LOGGER = Logger.getLogger(IlinqChecksumCalculator.class);

    public String calculateCheckSum(String rfsdata) throws IOException {

        System.out.println(rfsdata);
        String checkSumValue = null;
        if (StringUtils.isNotBlank(rfsdata)) {
            try {
                // Create MessageDigest object for MD5
                MessageDigest digest = MessageDigest.getInstance("MD5");

                // Update input string in message digest
                digest.update(rfsdata.getBytes(), 0, rfsdata.getBytes().length);

                // Converts message digest value in base 16 (hex)
                checkSumValue = new BigInteger(1, digest.digest()).toString(16);

            } catch (NoSuchAlgorithmException exception) {
                DATA_LOADER_CHECKSUM_CALCULATOR_LOGGER.error(
                        "Error in determineInputCheckSum() method during calculation of checksum for Input JSON String for ",
                        exception);
            }
        }
        System.out.println("Final checksum value is:" + checkSumValue);
        return checkSumValue;
    }

}

这是我的测试课:

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;

import java.io.IOException;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class IlinqChecksumCalculatorTest {

    private IlinqChecksumCalculator ilinqCheckSum;

    @Before
    public void setUp() throws Throwable {

        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testCheckSum() throws IOException {

        when(ilinqCheckSum.calculateCheckSum("abcde")).thenReturn("defgh");

        assertEquals("defgh", ilinqCheckSum.calculateCheckSum("abcde"));

    }
}

我得到一个空指针异常。

【问题讨论】:

  • ilinqCheckSum 似乎没有初始化。尝试在私有 IlinqChecksumCalculator ilinqCheckSum 上添加@Mock 注释
  • 我是 mockito Junit 测试的新手。这是我想测试的主要课程 4 次?你使用哪个循环? for循环还是while?

标签: java unit-testing junit


【解决方案1】:

只是为了回答您的问题:要将ilinqCheckSum 处理为模拟,您应该使用@Mock 对其进行注释。 但是在这里你不应该使用mockito!你想测试IlinqChecksumCalculator 而不是模拟!您应该创建它的真实实例,并在必要时将依赖项作为模拟注入。

【讨论】:

  • 我确实听过你说 n m 收到此错误 java.lang.AbstractMethodError: org.powermock.api.mockito.internal.mockmaker.PowerMockMaker.isTypeMockable(Ljava/lang/Class;)Lorg/mockito/插件/MockMaker$TypeMockability;在 org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26) 在 org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21) 在 org.mockito.internal.creation.MockSettingsImpl.validatedSettings (MockSettingsImpl.java:167) 在 org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsIm
  • 我没有得到你的解决方案,你能详细说明一下吗?
【解决方案2】:

通过模拟 calculateCheckSum 方法,您没有覆盖单元测试中的任何代码。我认为你不应该在这里使用 Mock 。试试下面的测试方法。

 public void testCheckSum() throws IOException {

       String result =  ilinqCheckSum.calculateCheckSum("abcde")
        assertNotNull(result );

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2018-09-04
    • 2013-11-12
    • 2018-11-21
    • 2018-10-19
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多