我正在使用autowiring(@Autowired)在JUnit測試類中注入依賴項,並面臨NullPointerException。我想知道在JUnit測試課中/是否可以使用自動裝配。否則,如何在測試類中注入bean。我的代碼如下 -在JUnit中使用@Autowired測試類會拋出NullPointerException?
主類/客戶端 - 自動裝配按預期工作。
package com.example.demo;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import com.example.demo.services.IMessage;
import com.example.demo.services.SayWelcomeService;
@SpringBootApplication
@ComponentScan("com.example.demo.services")
public class AutowireWithMultipleImplementationsApplication {
@Autowired
IMessage sayHelloService;
@Autowired
SayWelcomeService sayWelcome;
@Autowired
IMessage masterService;
public static void main(String[] args) {
SpringApplication.run(AutowireWithMultipleImplementationsApplication.class, args);
}
@PostConstruct
public void init() {
String message;
message=masterService.message("George");
System.out.println("message: \n" + message);
message=sayWelcome.message("george");
System.out.println("message: " + message);
}
}
服務接口和實現類
接口即時聊天
package com.example.demo.services;
public interface IMessage {
String message(String name);
}
服務SayWelcomeService
package com.example.demo.services;
import org.springframework.stereotype.Service;
@Service
public class SayWelcomeService implements IMessage {
@Override
public String message(String name) {
return "Welcome Dear User - " + name ;
}
}
服務SayHelloService
package com.example.demo.services;
import org.springframework.stereotype.Service;
@Service
public class SayHelloService implements IMessage {
@Override
public String message(String name) {
return "Hello Dear User - " + name ;
}
}
主服務調用其他服務。自動裝配按預期工作。
MasterService
package com.example.demo.services;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MasterService implements IMessage {
@Autowired
List<IMessage> listOfServices;
@Autowired
IMessage sayHelloService;
@Autowired
SayWelcomeService sayWelcome;
@Override
public String message(String name) {
StringBuilder messages = new StringBuilder();
for(IMessage m: listOfServices)
{
messages.append(m.message(name));
messages.append("\n");
}
System.out.println(".....");
System.out.println(sayHelloService.message(name));
System.out.println(sayWelcome.message(name));
return messages.toString();
}
}
現在測試類。
SayWelcomeServiceTest
package com.example.demo.tests;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.demo.services.SayWelcomeService;
public class SayWelcomeServiceTest {
@Autowired
SayWelcomeService sayWelcomeService;
@Test
public void testSayWelcomeMessage()
{
String message = sayWelcomeService.message("George");
assertThat(message, equalTo("Welcome Dear User - George"));
}
}
的問題是在上述類。 @Autowired字段(sayWelcomeService)爲空。爲什麼?如何解決這個問題?
請看看:https://stackoverflow.com/questions/21878714/how-to-write-junit-test-with-spring-autowire – DevDio