spring Sping Boot Override Property in Service Class With TestPropertySource Annotation

cgvd09ve  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(92)

我有几个属性在服务类如下。我可以从www.example.com文件中填充它们application.properties。
我的application.properties文件是这样的,它的值与application-test.properties文件相同:

server.port=8282
short.url.domain=gnl.co

字符串
application.properties在src/main/resources中,application-test.properties在src/test/resources中。
我的服务类是这样的:

@Service
public class ShortURLService {
    @Value("${short.url.domain}")
    private String shortUrlDomain;

    @Value("${server.port}")
    private String shortUrlPort;

    .....

}


我有一个这样的测试类:

@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@ContextConfiguration(classes = ShortURLService.class)
public class ShortURLServiceTest {

  @InjectMocks
  private ShortURLService shortURLService;

   @Test
    public void testShortenURL() {
        String shortUrl = shortURLService.shortenURL("http://ilkaygunel.com");
        assertTrue(shortUrl.contains("gnl.co/"));
    }

}


我检查了来自application-test.properties文件的值进入ShortURLServiceTest类,但ShortURLService中的值为null。
如何使用application-test.properties文件填充服务类中的变量?

kmbjn2e3

kmbjn2e31#

因为@InjectMocks是Mockito的东西,它对Spring一无所知,所以它不理解@Value是什么,也不会向它注入值。
您必须使用@Autowired将实际的ShortURLServicebean从spring上下文注入到测试中。
因此,更改为以下内容应该可以解决您的问题:

@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@ContextConfiguration(classes = ShortURLService.class)
public class ShortURLServiceTest {

   
   @Autowired
   private ShortURLService shortURLService;

    @Test
    public void testShortenURL() {
       
    }

}

字符串

相关问题