所以,目前,我正在測驗一個服務類
這是我的 ConvertService.java
@Service
public class ConvertService {
private final NetworkClient networkClient; //NetworkClient is a Service too
private final ConvertUtility convertUtility;
public ConvertService(Network networkClient) {
convertUtility = ConvertFactory.of("dev", "F");
this.networkClient = networkClient
}
public Response convert(Request request) {
User user = networkClient.getData(request.getId()); //User is POJO class
Context context = convertUtility.transform(request.getToken()) //getToken returns a String
//Context is a normal Java
}
}
這是我的 ConvertServiceTest.java
@SpringBootTest
@RunWith(MockitoJunitRunner.class)
class ConvertServiceTest {
@MockBean
private NetworkClient networkClient;
@Mock
ConvertUtility convertUtility;
private ConvertService convertService;
@BeforeEach
void setUp() {
convertService = new ConvertService(networkClient);
}
private mockMethod() {
Request request = Request(1000);
User user = new User("user1");
Context context = new Context();
when(networkClient.getData(anyLong())).thenReturn(user);
when(convertUtility.transform(any(String.class)).thenReturn(context);
Response response = convertService.convert(request); //it throws me an exception here
}
}
convertService.convert(request); 拋出例外
指著里面 convertUtility.transform(request.getToken())
我不知道為什么它從transform方法中處理所有內容,當我寫
when(convertUtility.transform(any(String.class)).thenReturn(context);
有人可以幫忙嗎?
編輯:ConvertUtility是一個只讀庫
uj5u.com熱心網友回復:
在您的公共建構式中,您使用靜態工廠方法來獲取ConvertUtility. 您必須模擬靜態ConvertUtility.of()方法才能在測驗期間使用模擬。
雖然Mockito 能夠模擬靜態方法,但我建議重構(如果可能)您的類設計并接受一個實體ConvertUtility作為公共建構式的一部分:
@Service
public class ConvertService {
private final NetworkClient networkClient; //NetworkClient is a Service too
private final ConvertUtility convertUtility;
public ConvertService(Network networkClient, ConvertUtility convertUtility) {
this.convertUtility = convertUtility
this.networkClient = networkClient
}
}
通過此更改,您可以ConvertService在撰寫單元測驗時輕松模擬您的合作者:
@ExtendWith(MockitoExtension.class)
class ConvertServiceTest {
@Mock
private NetworkClient networkClient;
@Mock
private ConvertUtility convertUtility;
@InjectMocks
private ConvertService convertService;
@Test // make sure it's from org.junit.jupiter.api
void yourTest() {
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346607.html
