如果你想,你仍然可以Spring上下文中運行測試,並設置Spring配置類中所需的性能。如果您使用JUnit,使用基於SpringJUnit4ClassRunner和定義專用配置類爲你的測試這樣的:
類測試:
@Component
public SomeClass {
@Autowired
private SomeDependency someDependency;
@Value("${someProperty}")
private String someProperty;
}
測試類:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SomeClassTestsConfig.class)
public class SomeClassTests {
@Autowired
private SomeClass someClass;
@Autowired
private SomeDependency someDependency;
@Before
public void setup() {
Mockito.reset(someDependency);
@Test
public void someTest() { ... }
}
,配置類此測試:
@Configuration
public class SomeClassTestsConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer properties() throws Exception {
final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
Properties properties = new Properties();
properties.setProperty("someProperty", "testValue");
pspc.setProperties(properties);
return pspc;
}
@Bean
public SomeClass getSomeClass() {
return new SomeClass();
}
@Bean
public SomeDependency getSomeDependency() {
// Mockito used here for mocking dependency
return Mockito.mock(SomeDependency.class);
}
}
說了這麼多,我不會推薦這種方法,我只是在這裏添加它作爲參考。在我看來,更好的方法是使用Mockito亞軍。在那種情況下,你根本不需要在Spring內運行測試,這更簡單明瞭。
正是我一直在試圖做什麼,我一直在尋找的設置我的課裏面的價值,謝謝! – Kyle
或者即使沒有Spring依賴關係,也可以將該字段更改爲默認訪問(程序包保護),以使其可以輕鬆訪問測試。 –
例如:'org.springframework.test.util.ReflectionTestUtils.setField(classUnderTest,「field」,「value」);' – Olivier