Я пишу тестовые тесты конечных точек, и для большинства из них есть внешняя веб-служба, которую нужно издеваться, или пару из них.альтернатива оператору instanceof при указании mocks для нескольких веб-сервисов
Сначала я создавал макеты в тестах, которые были в порядке, когда в тесте на конечную точку использовалась только одна внешняя служба, создание макета было в основном одним лайнером.
Поскольку использование случаев стало более сложным, мне нужно было издеваться над несколькими сервисами и исключениями для одного теста конечных точек. Я создал эти штуки для фабрик за фабриками, которые расширяют единый заводский шаблон.
Внутри этой фабрики есть внутренний класс, который я использовал в качестве строителя для MockWebServiceServer
.
protected class MultiStepMockBuilder {
private List<Object> mockActions = new ArrayList<Object>();
private WebServiceGatewaySupport gatewaySupport;
protected MultiStepMockBuilder(WebServiceGatewaySupport gatewaySupport) {
this.gatewaySupport = gatewaySupport;
}
protected MultiStepMockBuilder exception(RuntimeException exception) {
mockActions.add(exception);
return this;
}
protected MultiStepMockBuilder resource(Resource resource) {
mockActions.add(resource);
return this;
}
protected MockWebServiceServer build() {
MockWebServiceServer server = MockWebServiceServer.createServer(gatewaySupport);
for(Object mock: mockActions) {
if (mock instanceof RuntimeException) {
server.expect(anything()).andRespond(withException((RuntimeException)mock));
}
else if (mock instanceof Resource)
{
try
{
server.expect(anything()).andRespond(withSoapEnvelope((Resource) mock));
} catch (IOException e) {e.printStackTrace();}
}
else
throw new RuntimeException("unusuported mock action");
}
return server;
}
}
}
Так что я теперь сделать что-то вроде этого, чтобы создать макет:
return new MultiStepMockBuilder(gatewaySupport).resource(success).exception(new WebServiceIOException("reserve timeout"))
.resource(invalidMsisdn)
.build();
Проблема у меня с этой реализации является зависимость от instanceof
оператора, который я никогда не использовать за пределами equals
.
Есть ли альтернативный способ экземпляра оператора в этом сценарии? Из вопросов по теме instanceof
все утверждают, что их следует использовать только в пределах equals
, и поэтому у меня есть ощущение, что это «грязное» решение.
Есть ли альтернатива оператору instanceof
, в пределах весны или как другой дизайн, сохраняя при этом fluent interface
для создания макетов?
Это действительно хорошая идея, чтобы обернуть исключение и ресурс в контейнерах, которые реализуют общий интерфейс. Обычно у меня были собственные объекты, реализующие общий интерфейс, чтобы исключить экземпляр, но поскольку RuntimeException и ресурс java thingy, я не мог этого сделать. – John