当从 Junit 调用实际方法而不是 test.properties 文件中的值时,从属性文件中获取值的 var 为空怎么修?

问题描述

编写测试的方法

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

AppUtils 方法

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

我的 JUnit:

@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(),fileUUID));
        //When called from below bucketName is null
        repoObj = sampleClassA.retrieveObject(fileUUID);
        assertEquals(repoObj.getRepositoryDocumentId(),fileUUID);
    }
}

当从 Mockito 调用时,bucketName 的值存在并从我的 applications-test.properties 中选取,而当从测试中调用实际方法时,bucketName 为空。这导致我的测试在到达 AppUtils.getKeyPath() 时因空指针异常而失败。如何修复此单元测试?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)