如何将@Value传递给@Component进行弹簧单元测试

时间:2018-10-16 14:48:06

标签: spring eclipse testing

我正在编写用于服务,控制器等的单元测试,但是有一个@Component具有以下值

@Component
Public class myclass
   @Autowired
   Private MyTemplate myTemplate

   @Value("$someString")
   Private String someString

   @PostConstruct
   Public void loadString()
      ...

如何将值手动加载到@Values中?我尝试了Mocks,TestPropertySource,ReflectionTestUtils等方法

2 个答案:

答案 0 :(得分:0)

我可以立即想到两个选择

1)您可以在test / resources / test.properties中定义$ someString

@RunWith(SpringRunner.class)
@TestPropertySource(locations="classpath:test.properties")
public class ClassTest {

  }

2)手动完成

@RunWith(SpringRunner.class)
public class ClassTest {

    @Autowired
     private MyClass miclass;

 @Before
 public void setupObject() {
     miclass.setProperty("someting");
  }

  }

答案 1 :(得分:0)

您可以通过ReflectionTestUtils在测试类中插入@Value。仅在控制器的情况下加载容器。编写服务和dao的测试用例时,无需加载spring容器。

public class TestClass{
 private @InjectsMock ServiceClass service; 

 @BeforeAll
 public void setUp(){
    ReflectionTestUtils.setField(service, "someString", "someValue");
 }

//your test cases over here.
}