Я пытаюсь отразить уже работающий тест Java, автоматически подключая ресурс внешней службы с AutowireCapableBeanFactory. Вот то, что я придумал, похоже, работает, пока не пришло время автоматически связывать зависимости рассматриваемого сервиса.
Я также пытался использовать родительский класс Java для обоих наборов Java и Scala, которые автоматически связывают необходимые bean-компоненты, которые отлично работали для версии Java, но не для версии Scala из-за некоторых нулевых указателей.
class RequestSuite extends PropSpec
with TableDrivenPropertyChecks with Matchers with BeforeAndAfterEach with BeforeAndAfterAll {
var mockServer: ClientAndServer = _
var proxy: ClientAndProxy = _
var resource = new SpringBeanResourceThatWorksFineOnOtherJavaClass
import BaseTest._
setupData()
ctx.getAutowireCapableBeanFactory.autowireBean(resource)
val testResp = resource.create(request)
override def beforeAll: Unit = {
mockServer = startClientAndServer(1081)
proxy = ClientAndProxy.startClientAndProxy(1091)
}
override def afterAll: Unit = {
mockServer.stop
proxy.stop
}
val testExample = {...}
property("Attributes should match for each example value") {...}
class CallBackTest extends ExpectationCallback {
def mockResponse(httpRequest: HttpRequest): HttpResponse = response.withStatusCode(200)
.withHeaders(header("Content-Type", "application/xml"))
override def handle(httpRequest: HttpRequest): HttpResponse = mockResponse(httpRequest)
}
}
Если я запускаю это, у меня появляется длинное сообщение об ошибке типа
Исключение или ошибка привели к прерыванию запуска: Ошибка создания компонента с
название
'SpringBeanResourceThatWorksFineOnOtherJavaClass':
Инъекция автосвязанных зависимостей не удалась; вложенное исключение
org.springframework.beans.factory.BeanCreationException: не удалось
поле autowire: частное
AutowiredDependencyWithinThisService
вложенное исключение
org.springframework.beans.factory.NoSuchBeanDefinitionException: нет
квалифицирующий боб типа
[AutowiredDependencyWithinThisService]
найдено для зависимости: ожидается как минимум 1 компонент, который квалифицируется как
autowire кандидат на эту зависимость. Аннотации зависимостей:
{@ Org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}
Для сравнения приведен фрагмент версии Java, который успешно выполняется
public class TestSuite extends BaseTest {
private static ClientAndProxy proxy;
private static ClientAndServer mockServer;
SameServiceThatWorksFineWithTheJavaVersion resource = new SameServiceThatWorksFineWithTheJavaVersion();
@Autowired
private AutowireCapableBeanFactory beanFactory;
@BeforeClass
public static void startProxy() {
mockServer = startClientAndServer(1080);
proxy = ClientAndProxy.startClientAndProxy(1090);
}
@AfterClass
public static void stopProxy() {
proxy.stop();
mockServer.stop();
}
@Test
public void testStuff() throws SomeException {...}
private void testStuffHelper() {
...
beanFactory.autowireBean(resource);
TestResp testResp = resource.doStuff(request);
...
}