junit @TestPropertySource未初始化布尔属性

kxxlusnw  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(116)

我尝试使用@TestPropertySource来覆盖我声明的变量之一。下面是我的测试代码:

@RunWith(SpringRunner.class)
@TestPropertySource(properties = {"calculator.enabled=true"})
public class CalculatorTest {

    private Calculator calculator;

    @Before
    public void init() {
        calculator = new Calculator();
    }

    @Test
    public void isEnabled_Success_Test() {
        Assert.assertFalse(calculator.isEnabled());
    }
}

下面是要测试的类:

@Component
public class Calculator {

    @Value("${calculator.enabled:true}")
    private boolean isEnabled;

    @Override
    public boolean isEnabled() {
        return isEnabled;
    }
}

然而,我总是在不应该通过测试的时候通过测试,因为isEnabled字段被初始化为默认值false。

eni9jsuy

eni9jsuy1#

正如M.代努姆已经说过的,您正在使用“new Calculator()”创建计算器;“。因此,它不是Spring管理的Bean。
您应该让spring创建计算器。预处理“spring-boot-starter-test”,例如:

@RunWith(SpringRunner.class)
@TestPropertySource(properties = {"calculator.enabled=true"})
@SpringBootTest(classes = Calculator.class)
public class CalculatorTest {

    @Autowired
    private Calculator calculator;

    @Test
    public void isEnabled_Success_Test() {
        Assert.assertTrue(calculator.isEnabled());
    }
}

此外,您当前使用的是JUnit 4,也许迁移到JUnit 5是一个好主意

相关问题