我有一个很基本的问题,很抱歉,如果以前有人问过这个问题。我担心我可能使用的词语不正确,这是我第一次参加Spring。
我这样声明RestController
:
@RestController
class TelemetryController {
@Autowired
lateinit var service: TelemetryService
//...
}
在我们的TelemetryService
模块中采用main
的具体实现:
@Service
class ConcreteTelemetryService : TelemetryService {
// some production code
}
然后我想在测试期间在控制器中使用一项服务(在我们的test
模块内部:
@Service
class TestingTelemetryService : TelemetryService {
// some test code using local data
}
重要的是,我不想为此使用Mockito,因为测试的实现需要非常不适合Mockito的特定设置。
我的测试被声明为:
@RunWith(SpringRunner::class)
@SpringBootTest
@AutoConfigureMockMvc
class HowDoInjectServiceExampleTest {
@Autowired
lateinit var mockMvc: MockMvc
}
在这种情况下,如何将TestingTelemetryService
放入控制器?
答案 0 :(得分:1)
有多种方法可以实现此目的,但我建议使用Spring Profiles。
在默认实现中使用默认配置文件。如果未指定配置文件,将使用此bean。
void pushMagnet(final String apiKey, final String magnetLink, final Context context) {
final String url = "https://premiumize.me/api/transfer/create?apikey=" + apiKey;
JSONObject srcMagnet = new JSONObject();
try {
srcMagnet.put("src", magnetLink);
} catch (JSONException e) {
e.printStackTrace();
}
OkHttpClient client = new OkHttpClient().newBuilder()
.addInterceptor(new GzipRequestInterceptor()).build();
AndroidNetworking.initialize(context, client);
AndroidNetworking.post(url)
.addHeaders("accept", "application/json")
.addHeaders("Content-Type", "multipart/form-data")
.addQueryParameter("src", magnetLink)
.build().getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
Log.e("Server response:", response.toString());
}
@Override
public void onError(ANError anError) {
Log.e("Server error:", anError.toString());
}
});
}
将配置文件“测试”添加到测试实现中。
@Profile("default")
@Service
class ConcreteTelemetryService : TelemetryService {
// some production code
}
现在您可以通过以下方式开始测试
@Profile("test)
@Service
class TestingTelemetryService : TelemetryService {
// some test code using local data
}
在此处了解有关个人资料的更多信息:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
答案 1 :(得分:0)
如果您的TestingTelemetryService
与HowDoInjectServiceExampleTest
处于同一软件包中,那么您可以像下面这样简单地自动装配测试bean
@RunWith(SpringRunner::class)
@SpringBootTest
@AutoConfigureMockMvc
class HowDoInjectServiceExampleTest {
@Autowired
lateinit var mockMvc: MockMvc
@Autowired
var service: TestingTelemetryService
}
如果不是,那么您应该定义一些TestConfiguration
并以编程方式定义具有服务名称的bean,并在测试中使用@Qualifier来使用它来解析要使用的bean(在您的情况下,它是测试bean)