Java 当从Junit调用实际方法而不是test.properties文件中的值时,从属性文件中获取值的var为null。如何修复?
为其编写测试的方法:Java 当从Junit调用实际方法而不是test.properties文件中的值时,从属性文件中获取值的var为null。如何修复?,java,junit,mockito,junit4,Java,Junit,Mockito,Junit4,为其编写测试的方法: public class SampleClassA { @Value("${aws.s3.bucket}") private String bucketName; public Object retrieveObject(String fileUUID) { Object repoDoc = new Object(); MetaData metaData = getMetaData(fileUU
public class SampleClassA {
@Value("${aws.s3.bucket}")
private String bucketName;
public Object retrieveObject(String fileUUID) {
Object repoDoc = new Object();
MetaData metaData = getMetaData(fileUUID);
repoDoc.setDocumentContent(retrieveFileFromS3(AppUtils.getKeyPath(metaData.getPath(), bucketName, fileUUID)));
return repoDoc;
}
}
附件方法:
public final class AppUtils {
public static String getKeyPath(String path, String bucketName, String fileUUID){
if(path.startsWith(bucketName)){
return (path.replace((bucketName+"/"), "")+"/"+fileUUID);
} else {
throw new Exception(ErrorCode.INVALID_PATH);
}
}
}
我的少年:
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes = S3DocumentManagerImpl.class)
@EnableConfigurationProperties
@ActiveProfiles("test")
public class SampleClassATest {
@Value("${aws.s3.bucket}")
private String bucketName;
String fileUUID;
@Spy
SampleClassA sampleClassA1;
@InjectMocks
SampleClassA sampleClassA;
@BeforeEach
void setUp() {
}
@Before
public void setup() {
fileUUID = "TestFileUUID";
repoObj = new Object();
metaData = new MetaData();
bucketName = "testBucket";
}
@Test
public void retrieveObjectSuccessTest() throws Exception {
metaData = CreateObjectsForEntityStub.createMetaDataModel();
doReturn(metaData).when(sampleClassA1).getMetaData(fileUUID);
when(repository.findById(fileUUID)).thenReturn(Optional.of(metaData));
//Here Bucket Name has Value form application-test.properties
doReturn(null).when(sampleClassA1).retrieveFileFromS3(AppUtils.getKeyPath(metaData.getPath(), bucketName, fileUUID));
//When called from below bucketName is null
repoObj = sampleClassA.retrieveObject(fileUUID);
assertEquals(repoObj.getRepositoryDocumentId(), fileUUID);
}
}
从Mockito调用时,bucketName的值存在,并从my applications-test.properties中选取,而从测试调用实际方法时,bucketName为null。这会导致测试在到达AppUtils.getKeyPath()时失败,并出现空指针异常。如何修复此单元测试?因为您正在创建一个新实例,而不是使用spring配置的实例。@M.Deinum I删除了测试前对bucketName的赋值。但仍然是相同的行为。这无关紧要,测试中使用的
SampleClassA
不是spring管理的实例,因此它不会由spring处理。@M.Deinum您可以指导我如何正确执行此操作吗。从我的观点来看,您的测试根本没有意义,我也没有得到您试图测试的内容。