我已经为以下方法写了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);
}
}
我的问题是,每当我尝试进行断言检查时,我总是会变得无效:预付费对象。我也将注射量为enterprisecustomerverificationservice enterprisormerverificationservicemock;请建议我我的业务逻辑有问题吗?
您对您的参数做了一些糟糕:
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);