有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在单元测试中为字符串设置值?

在我当前的类中,有一个字段如下所示:

阶级

 @Inject
 @ConfigValue(key = ConfigProperties.ADDRESS)
 private String address;

配置属性

  public static final String ADDRESS = //
        "42 Rue Cadet, 75009 Paris";

我有一个方法:

 ...... 
 private boolean isValidAddress() {
    if(address != null && address.equals("42 Rue Cadet, 75009 Paris")) {
        return true;
    } else {
        return false;
    }
 } 
 ......

我想创建一个单元测试来验证isValidAddress()方法,但我不知道如何设置地址

例如:我想用这个地址进行测试=“巴黎卢浮路23号,75045”。 我想模拟ConfigProperties,但我在ConfigProperties中没有任何可以设置地址值的方法

有什么建议吗


共 (1) 个答案

  1. # 1 楼答案

    我们面临着同样的问题,使用反射来解决许多人提出的问题是相当麻烦的。。。因此,我们编写了一个JUnit5扩展来解决这个问题:

    https://github.com/exabrial/mockito-object-injection

    它所做的是将与您提供的映射中的键名相同的值注入到您的被测类中

    @TestInstance(Lifecycle.PER_METHOD)
    @ExtendWith({ MockitoExtension.class, InjectMapExtension.class })
    public class MyControllerTest {
     @InjectMocks
     private MyController myController;
     @Mock
     private Logger log;
     @Mock
     private Authenticator auther;
     @InjectionMap
     private Map<String, Object> injectionMap = new HashMap<>();
    
     @BeforeEach
     public void beforeEach() throws Exception {
      injectionMap.put("securityEnabled", Boolean.TRUE);
     }
    
     @AfterEach
     public void afterEach() throws Exception {
      injectionMap.clear();
     }
    
     public void testDoSomething_secEnabled() throws Exception {
      myController.doSomething();
     }