当前位置: 首页 > 知识库问答 >
问题:

为什么我的Spring Boot单元测试在服务类中加载@Value属性?

田博易
2023-03-14

为什么Spring Boot不会在服务类中测试加载@Value属性?我有一个带有此属性的服务类。

@Value("${azure.storage.connection-string}")
private String connectionString;

我正在使用JUnit4。运行此测试时,connectionString属性为null。

@TestPropertySource(locations="classpath:/application-test.yml")
@Slf4j
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
public class BlobServiceTest {

    @Autowired
    private ObjectMapper objectMapper;

    private BlobService blobServiceSpy;

    @Before
    public void setup() {
        blobServiceSpy = Mockito.spy(new BlobService(objectMapper));
    }

    @Test
    public void testGetExampleBlob() {
        String stubFileId = UUID.randomUUID().toString();
        PdfBlob pdfBlob = null;
        try {
             pdfBlob = blobServiceSpy.downloadBlobContent(stubFileId);
        } catch (JsonProcessingException e) {
            log.error("Test failed.", e);
            Assert.fail();
        }
        Assert.assertNotNull("PDF blob was null.", pdfBlob);
    }
}

这个问题有一些答案,但很不清楚,答案需要更多信息。

这是可行的,但似乎是一个“黑客”:

public class BlobServiceTest {

    @Value("${azure.storage.containerName}")
    private String containerName;

    @Value("${azure.storage.connection-string}")
    private String connectionString;

    @Autowired
    private ObjectMapper objectMapper;

    private BlobService blobServiceSpy;

    @Before
    public void setup() {
        blobServiceSpy = Mockito.spy(new BlobService(objectMapper));
        //TODO not sure why, but had to setup connectionString property this way
        blobServiceSpy.containerName = this.containerName;
        blobServiceSpy.connectionString = this.connectionString;
    }

当我创建Spy对象时,为什么SpringBootTest不为我连接这些值?

共有1个答案

汪胡非
2023-03-14

当您使用new创建BlobService时,spring并不知道它,因此不会注入您的属性。尝试自动连线你的blob服务,然后将其包装在spy中。

 类似资料:
  • 我正在尝试使用Mockito在SprinBoot应用程序中进行一些jUnit测试。 现在我的服务有了一些变量,可以从通过注释: 我试图通过像这样使用来测试这个: 但是,该属性不会被填充,并保持为。 这方面有很多TPOIC,但我还没能拼凑出一个解决方案。我看到解决方案建议,但它似乎想做一个集成测试,使服务加速,但由于无法连接到数据库,服务失败了。所以这不是我想要的。 我还看到一些解决方案建议我制作一

  • 我不熟悉单元测试。参考google之后,我创建了一个测试类来测试我的控制器,如下所示: 我有以下控制器和服务类: 当我调试单元测试时,控制器中的p对象为null。我的状态是200,但不是预期的JSON响应 我错过了什么?

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT

  • 本文向大家介绍AngularJS 单元测试服务,包括了AngularJS 单元测试服务的使用技巧和注意事项,需要的朋友参考一下 示例 服务编号 考试 跑!

  • 我在导入一些Android UI测试框架类时遇到了麻烦--我只是不知道哪里出了问题! 这是我的课: 但是由于某种原因,我得到了错误'cannot find symbol activitytestrule'和'cannot find symbol androidjunit4'。我试图导入它们,但找不到。 有人有什么想法吗?

  • 问题内容: 我正在Android Studio中运行单元测试。我有一个使用以下代码加载本机库的Java类 但是当我在目录中测试此类时,我得到 我如何才能找到位于本地的.so库的路径,以便进行无误的单元测试? 注:里面的目录我有3个子目录:,和。其中的每一个都包含正确的.so文件。我正在使用 非实验版本 来构建NDK库。 我不想使用其他第三方测试库,因为我所有其他“纯” java类都可以进行单元测试