この問題はこのWebサイトと他の場所で広く調査されていますが、推奨される解決策は私にとってはうまくいきませんでした。Spring RESTful(Gradle):@Autowired results in NullPointerException
私は問題(bootRun)なしでSpringアプリケーション自体を実行できます。したがって、これはjUnit関連の問題だと思います。 SearchControllerUnitTestクラスでGradleテストまたはJUnitテストを実行しようとすると、NullPointerExceptionが発生します。
誰でも私の設定が間違っていることを指摘できますか?
ありがとうございました!
SearchControllerUnitTest.java
@Category(UnitTest.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class SearchControllerUnitTest extends UnitTest {
private MockMvc mockMvc;
@Override
@Before
public void setUp() {
super.setUp();
mockMvc = MockMvcBuilders.standaloneSetup(new SearchController()).build();
}
@Test
public void getProductTest() throws Exception {
. . .
}
SearchController.java
@RestController
public class SearchController {
public static final Logger log = LoggerFactory.getLogger(SearchController.class);
@Autowired
Product product; // <<< autowiring not working in jUnit only
@Autowired
ProductService productService; // <<< autowiring not working in jUnit only
@RequestMapping(value = "/search", method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<Product> getProduct(@RequestParam(value = "name", required = true) String name) {
if (productService == null) {
log.info("productService is null!!");
}
. . .
product = productService.getProduct(name); // <<<< NPE here
}
ProductService.java
public interface ProductService {
. . .
public Product getProduct(String productName);
. . .
}
ProductServiceImpl.java
@Service
public class ProductServiceImpl implements ProductService {
public Product getProduct(String productName){
. . .
}
}
例外:
Caused by: java.lang.NullPointerException
at com.somepckagename.controller.SearchController.getProduct(SearchController.java:36)
テストコンテキストに配線が定義されていますか? – Makoto