Junit测试类失败

时间:2017-09-04 10:40:26

标签: java junit mocking mockito

我已经为以下方法编写了Junit测试:

@Service
public class EnterpriseCustomerVerificationService {

 @Autowired
 CreditCheckRepository creditCheckRepository;

 public String FTACheck(StandardInputHeader charterHeaderInputInfo,
            Holder<StandardOutputHeader> charterHeaderOutputInfo, Long sys, Long prin, Long agent)
            throws EnterpriseCustomerVerificationException {

        String prepay = null;
        List<String> prepays = null;

        charterHeaderOutputInfo.value = new StandardOutputHeader(charterHeaderInputInfo);
        prepays = creditCheckRepository.getCSGPrepay(sys.toString(), prin.toString(), agent.toString(),
                charterHeaderInputInfo.getAuditUser());

        if (prepays != null && prepays.size() > 0) {
            prepay = prepays.get(0);
        }

        return prepay;
    }
}

CreditCheckRepository类

@Component
public class CreditCheckRepository {

    @Autowired
    SPGetCSGPrepay spGetCSGPrepay;

    public List<String> getCSGPrepay(String sys, String prin, String agent, String auditUser) {
        return spGetCSGPrepay.execute(sys, prin, agent, auditUser);
    }
}

测试方法

package com.charter.enterprise.credit.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.*;

import javax.xml.ws.Holder;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.test.util.ReflectionTestUtils;

@RunWith(MockitoJUnitRunner.class)
public class EnterpriseCustomerVerificationServiceTest {

    @InjectMocks
    EnterpriseCustomerVerificationService 
    enterpriseCustormerVerificationServiceMock;


    @Mock
    CreditCheckRepository creditCheckRepository;

    @Rule
    public ExpectedException thrown = ExpectedException.none();
    StandardInputHeader charterHeaderInputInfo;
    Holder<StandardOutputHeader> charterHeaderOutputInfo;

    @Before
    public void setup() {

        charterHeaderInputInfo = new StandardInputHeader();
        charterHeaderInputInfo.setAuditUser("test");
        charterHeaderInputInfo.setClientIp("127.0.0.1");
        charterHeaderOutputInfo = new Holder<StandardOutputHeader>();


        ReflectionTestUtils.setField(
                enterpriseCustormerVerificationServiceMock,
                "creditCheckRepository", creditCheckRepository);

    }
    @Test
        public void getFTACheckTest() {

            String auditUser = "User";
            Long sys = 123L;
            Long prin = 456L;
            Long agent = 789L;

            List<String> prepays = new ArrayList<String>();
            prepays.add("ABCDEF");

            Mockito.when(
                    creditCheckRepository.getCSGPrepay("123", "456", "789", "User"))
                    .thenReturn(prepays);
            // Mockito.when(spGetCSGPrepay.execute("123", "456","789",
            // "User")).thenReturn(prepays);
            String prepay = enterpriseCustormerVerificationServiceMock.FTACheck(
                    charterHeaderInputInfo, charterHeaderOutputInfo, sys, prin,
                    agent);
            assertNotNull(prepay);
    }
}

我的问题是,每当我尝试进行断言检查时,我总是会变为空:预付费对象。 我也将injectMocked作为EnterpriseCustomerVerificationService enterpriseCustormerVerificationServiceMock; 请告诉我,我的业务逻辑有什么问题或什么?

1 个答案:

答案 0 :(得分:1)

你用你的论点做了一些oops:

creditCheckRepository.getCSGPrepay("123", "456", "789", "User"))

应该是

creditCheckRepository.getCSGPrepay("123", "456", "789", "test"))

作为旁注,您应该使用ArgumentMatchers(如果您使用旧版本,可能是Matchers)以避免此类问题:

Mockito.when(creditCheckRepository.getCSGPrepay(ArgumentMatchers.anyString(), ArgumentMatchers.anyString(),
   ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenReturn(prepays);