Junit - Spring boot:测试时@Value始终为null

2024-03-16

有一个@Value注释的常量,在运行测试时没有被初始化,当构造函数中需要它时,它会抛出NullPointerException。

要测试的示例类:

class TestClass {
    @Value("${test.value1}")
    private String value1;

    private final TestTemplate testTemplate;

    public TestClass(TestTemplateBuilder builder) {
        testTemplate = builder.someMethod(value1).build();
    }


    ---
}

测试类示例:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestClass.class)
@SpringBootTest
class TestClassTest {

    @MockBean
    TestTemplateBuilder builder;

    @Autowired
    TestClass testClass = new TestClass(testTemplate);

    @Before
    public void setUp() {
        ReflectionTestUtils.setField(testClass, "value1", "VALUE");

        Mockito.when(builder.build()).thenReturn(new TestTemplate());
    }

    ---
}

尝试了一些方法,但没有任何效果:

  • 我创造了application.properties具有所需值的文件。
  • Created application-test.properties并添加了@TestPropertySource(locations="classpath:application-test.properties").
  • @SpringBootTest(properties = { "test.value1=VALUE" })

我也尝试过其他一些东西,但我得到的是NullPoiterException at someMethod(value1).

版本:

  • 爪哇:1.8
  • 春季启动:2.1.17
  • 朱尼特:4.12
  • 莫基托:2.23.4

如果 @Before 不起作用,请尝试使用 @BeforeEach。这对我有用。

`@BeforeEach
public void setUp() {
    ReflectionTestUtils.setField(yourInstanceClass, "fieldName", "fieldValue");
}`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Junit - Spring boot:测试时@Value始终为null 的相关文章

随机推荐

  • 移动设备上的 Javascript 点击事件

    我有一个 Javascript 函数 在 PC 上运行良好 但在移动设备上加载时不起作用 我认为这是因为移动设备对待点击的方式不同 但是如何修改以下功能以使其在移动设备上运行 function var a 48 0 49 1 50 2 51
  • DRF 序列化器中多个查找字段的自定义超链接 URL 字段

    我在用Django 休息框架 http www django rest framework org 用于为我的项目开发 Web api 在我的项目中 我需要构建嵌套 api 的端点 如下所示 users to get all users u
  • DICOM 图像中引用的图像序列中的[引用的 SOP 类/实例 UID] 是什么?

    我正在使用 fo dicom 库开发模态工作列表客户端 我不清楚以下与 有关的事情Referenced SOP Instance UID 0008 1155 什么是引用的 SOP 实例 UID 整个系列的参考 SOP 实例 UID 是否相同
  • 将密码迁移到 Devise

    我正在将用户数据库从 PHP 迁移到 Rails 我已经安装了 Devise Gem 现在运行良好 另外 我还发现了如何将现有用户的密码迁移到 Rails 的提示 我已将旧密码添加到相同的密码中encrypted passwordDevis
  • Android Marshmallow 6.0.1 蓝牙扫描未返回结果

    根据 Kitkat 4 4 4 的 update appCompat 使用以下代码和权限 6 01 中的蓝牙似乎无法按预期工作 没有返回任何结果 并且我附近有几个可发现的设备 有人对为什么有任何见解吗 我在 Nexus 5 上运行
  • python -正则表达式匹配单词列表

    我有一个 python 脚本 其中大约有 100 个正则表达式行 每行匹配某些单词 显然 该脚本每次运行时都会消耗高达 100 的 cpu 我基本上向它传递了一个句子 它会返回找到的任何匹配的单词 我想将它们组合成大约 4 或 5 个不同的
  • PHPUnit - getallheaders 不起作用

    我正在测试我的代码 并且标头有一些问题 在我使用的每个 api 中 headers getallheaders 为了实现这一点 当我使用应用程序或 chrome postman 扩展进行测试时 效果很好 当我启动测试时 像这样 client
  • 动态设置onclick并传入元素本身来访问innerHTML

    我正在动态创建一些 div 元素 然后填充它们innerHTML带有文本的属性 我正在尝试设置他们onclick事件处理程序如下 myDiv onclick function alert Hello 我能做到的 我想做的是能够访问新定义的值
  • 外键约束失败

    我在 php 和 mysql 方面相对较新 在我的值中插入值时我面临的问题leave表 我的leave包含以下列的表 1 lid INT主键 2 empname varchar 3 用户名 varchar 4 点头 INT 5 sdate
  • 使用设备构建时,Monotouch 在 LINQ 查询上崩溃

    这是我得到的错误 mscorlib 在使用 aot only 运行时尝试 JIT 编译方法 System Linq OrderedEnumerable 1 GetEnumerator 从我读到的内容看来 编译器在本例中不包含 GetEnum
  • 带有 CSV 文件的 azure Terraform 参数

    我正在尝试使用 CSV 文件访问 terraform 变量数据 创建资源组并将资源组的名称添加到 CSV 文件中并尝试访问代码 这是代码 locals Resource groupname csvdecode file path modul
  • 如何将垂直线的表格图像分成三张图像?

    我想将垂直线上的表格图像分成三个图像 如下所示 是否可以 每列的宽度是可变的 可悲的是 如您所见 左侧垂直线是从标题向下绘制的 输入图像 input png 输出图像 output1 png 输出图像 output2 png 输出图像 ou
  • 如何学习阿格达

    我正在努力学习agda 但是 我遇到了一个问题 我在 agda wiki 上找到的所有教程对我来说都太复杂了 并且涵盖了编程的不同方面 在并行阅读了 3 个关于 agda 的教程后 我能够编写简单的证明 但我仍然没有足够的知识来使用它来实现
  • 调用随机函数 Javascript,但不能调用同一函数两次

    我使用一个随机选择另一个有效函数的函数 但有时它会连续运行相同的函数两次甚至更频繁 有办法防止这种情况吗 我当前的代码 window setInterval function var arr func1 func2 func3 rand M
  • Node.js - 异步模块加载

    是否可以异步加载 Node js 模块 这是标准代码 var foo require foo js waiting for I O foo bar 但我想写这样的东西 require foo js function foo foo bar
  • 如何以编程方式获取 Google Cloud 定价详细信息?

    谁能告诉我如何以编程方式从 Google Cloud 网站获取 Google Cloud 定价详细信息 例如 Google Compute Engine Google Cloud Storage Google Cloud SQL 等的定价
  • Android 中的多屏幕 xml

    我正在开发2 2版本的android xml是根据这个版本设计的 模拟器规格 2 2版 内置 HVGA 内存 1024 现在我需要将此应用程序转换为4 0版本的三星galaxy s3 但屏幕非常拉伸 看起来不太好 如果有任何帮助 请提前致谢
  • Cloudinary - 上传预设必须位于未签名上传的白名单中

    我想将图像上传到 Cloudinary 使用 cordova 相机插件直接从 Ionic 中的相机拍摄 我收到代码 1 的错误 并显示消息 上传预设必须位于未签名上传的白名单中 如何解决这个错误 请帮忙 我编辑的js代码是 scope ca
  • 打印词性以及单词的同义词

    我有以下代码 用于从输入文本文件中获取单词并使用 WordNet 打印该单词的同义词 定义和例句 它根据词性将同义词与同义词集分开 即动词的同义词和形容词的同义词分别打印 例如 flabbergasted 一词的同义词有 1 flabber
  • Junit - Spring boot:测试时@Value始终为null

    有一个 Value注释的常量 在运行测试时没有被初始化 当构造函数中需要它时 它会抛出NullPointerException 要测试的示例类 class TestClass Value test value1 private String