spring-boot-starter-test を使用してプロジェクト内のクラス@Service
とクラスをテストしようとしていますが、テストしているクラスでは機能しません。@Repository
@Autowired
単体テスト:
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = HelloWorldConfiguration.class
//@SpringApplicationConfiguration(classes = HelloWorldRs.class)
//@ComponentScan(basePackages = {"com.me.sbworkshop", "com.me.sbworkshop.service"})
//@ConfigurationProperties("helloworld")
//@EnableAutoConfiguration
//@ActiveProfiles("test")
// THIS CLASS IS IN src/test/java/ AND BUILDS INTO target/test-classes
public class HelloWorldTest {
@Autowired
HelloWorldMessageService helloWorldMessageService;
public static final String EXPECTED = "je pense donc je suis-TESTING123";
@Test
public void testGetMessage() {
String result = helloWorldMessageService.getMessage();
Assert.assertEquals(EXPECTED, result);
}
}
サービス:
@Service
@ConfigurationProperties("helloworld")
// THIS CLASS IS IN /src/main/java AND BUILDS INTO target/classes
public class HelloWorldMessageService {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message=message;
}
}
単体テストのコメント付きのクラス注釈は、これを機能させるために私が試みたさまざまなことを表しています。テスト パッケージとプロジェクト パッケージは同じパッケージ パスにあり@ComponentScan
、エントリ ポイント (@RestController
メイン メソッドを持つクラス) から正常に動作します。私のクラスでは src/main/java 側の service@ComponentScan
とは問題ありませんが、テストでは問題ありません。を機能させるには、クラスにとして再度追加する必要があります。それ以外の場合、クラスは問題なくスコープ内にあり、テストから問題なく参照およびインスタンス化できます。問題は、テスト ランナーのクラスパス (この場合は /target/test-classes と /target/classes) の複数のエントリを正しくトラバースしていないように見えることです。@Autowire
@RestController
@Bean
@Configuration
@Autowired
@ComponentScan
私が使用している IDE は IntelliJ IDEA 13 です。
更新- ここに HelloWorldRs とその構成があります:
@RestController
@EnableAutoConfiguration
@ComponentScan
public class HelloWorldRs {
// SPRING BOOT ENTRY POINT - main() method
public static void main(String[] args) {
SpringApplication.run(HelloWorldRs.class);
}
@Autowired
HelloWorldMessageService helloWorldMessageService;
@RequestMapping("/helloWorld")
public String helloWorld() {
return helloWorldMessageService.getMessage();
}
}
...
@Configuration
public class HelloWorldConfiguration {
@Bean
public Map<String, String> map() {
return new HashMap<>();
}
// This bean was manually added as a workaround to the @ComponentScan problem
@Bean
public HelloWorldMessageService helloWorldMessageService() {
return new HelloWorldMessageService();
}
// This bean was manually added as a workaround to the @ComponentScan problem
@Bean
public HelloWorldRs helloWorldRs() {
return new HelloWorldRs();
}
}