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您可以指导我如何正确执行此操作吗。从我的观点来看,您的测试根本没有意义,我也没有得到您试图测试的内容。