微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当从 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 举报,一经查实,本站将立刻删除。