junit测试类失败

5kgi1eie  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(450)

我为以下方法编写了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);
    }
}

我的问题是,每当我尝试对prepay对象执行Assert检查时,总是得到null。我还将mock注入为enterprisecustomerverificationservice enterprisecustomervificationservicemock;请告诉我我的业务逻辑是否有问题?

c9x0cxw0

c9x0cxw01#

你的论点有点不对劲:

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);

相关问题