我正在嘗試為以下方法創建單元測驗:
public List<CompanyUserDTO> findAllByUserUuidIn(final Set<UUID> userUuidList) {
return companyUserRepository.findAllByUserUuidIn(userUuidList);
}
此方法回傳該CompanyUserDTO介面的串列。下面是介面定義:
public interface CompanyUserDTO {
UUID getUserUuid();
UUID getCompanyUuid();
String getCompanyName();
default CompanyDTO getCompany() {
return new CompanyDTO(getCompanyUuid(), getCompanyName());
}
}
這是CompanyDTO:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CompanyDTO {
private UUID uuid;
private String name;
public CompanyDTO(final Company company) {
this.uuid = company.getUuid();
this.name = company.getName();
}
}
我的單元測驗如下圖所示:
@Test
public void test_findAllByUserUuidIn() {
Set<UUID> userUuidList = new HashSet<>();
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000001"));
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000002"));
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000003"));
// --> here I need a mock list of `CompanyUserDTO`
List<CompanyUserDTO> companyUserDTOList = new ArrayList<>();
when(companyUserRepository.findAllByUserUuidIn(userUuidList))
.thenReturn(companyUserDTOList);
List<CompanyUserDTO> result = companyUserService
.findAllByUserUuidIn(userUuidList);
assertEquals(companyUserDTOList, result);
}
1.那么,我應該如何CompanyUserDTO在測驗中創建一個模擬串列?
2.我的單元測驗可以用這種方法嗎?
uj5u.com熱心網友回復:
- 您不需要模擬,只需自己創建物件(我猜您至少有介面的實作
CompanyUserDTO)。 - 其他一切都可以,盡管您的方法沒有那么多需要測驗的邏輯。
鑒于您沒有實作,CompanyUserDTO您可能會使用匿名類來避免實作本身,而只是出于測驗目的。你可以這樣做:
@Test
public void test_findAllByUserUuidIn() {
// Arrange
Set<UUID> userUuidList = new HashSet<>();
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000001"));
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000002"));
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000003"));
CompanyUserDTO companyUserDTO = new CompanyUserDTO() {
@Override
public UUID getUserUuid() {
return UUID.randomUUID();
}
@Override
public UUID getCompanyUuid() {
return UUID.randomUUID();
}
@Override
public String getCompanyName() {
return "Company Name Test";
}
};
List<CompanyUserDTO> companyUserDTOList = new ArrayList<>();
companyUserDTOList.add(companyUserDTO);
when(companyUserRepository.findAllByUserUuidIn(userUuidList))
.thenReturn(companyUserDTOList);
// Act
List<CompanyUserDTO> result = companyUserService
.findAllByUserUuidIn(userUuidList);
// Assert
assertEquals(companyUserDTOList, result);
}
如果您不想使用匿名類,則需要在test源包中創建以下類:
public class CompanyUserDTOImpl implements CompanyUserDTO {
@Override
public UUID getUserUuid() {
return UUID.randomUUID();
}
@Override
public UUID getCompanyUuid() {
return UUID.randomUUID();
}
@Override
public String getCompanyName() {
return "Company Name Test";
}
};
然后你的測驗會更簡單:
@Test
public void test_findAllByUserUuidIn() {
// Arrange
Set<UUID> userUuidList = new HashSet<>();
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000001"));
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000002"));
userUuidList.add(UUID.fromString("00000000-0000-0000-0000-000000000003"));
List<CompanyUserDTO> companyUserDTOList = new ArrayList<>();
companyUserDTOList.add(new CompanyUserDTOImpl());
when(companyUserRepository.findAllByUserUuidIn(userUuidList))
.thenReturn(companyUserDTOList);
// Act
List<CompanyUserDTO> result = companyUserService
.findAllByUserUuidIn(userUuidList);
// Assert
assertEquals(companyUserDTOList, result);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362644.html
