用Mockito模拟ElasticSearch方法调用

时间:2019-12-24 12:43:04

标签: java elasticsearch junit mockito

我正在为构建并执行ElasticSearch查询的服务构建单元测试。

为了节省时间,我将尝试尽可能高效地进行情境化。

应用程序类型:Spring Boot微服务,Java版本1.8。

基本上这段代码:

from kivy.app import App
from kivy.uix.behaviors import ButtonBehavior  
from kivy.uix.image import Image  
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.spinner import Spinner
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.screenmanager import SlideTransition
from kivy.lang import Builder
from kivy.config import Config
Config.set('graphics', 'resizable', True) 

kv=Builder.load_string("""
<Image1n>: 
    orientation:'vertical'
    BoxLayout: 
        padding:5
        ImageButton: 
            source: 'anorth.jpg'
            size_hint: 0.6, 0.6
            pos_hint: {'center_x':.1, 'center_y': .8}
            on_release: root.on_press()
    BoxLayout: 
        padding:5
        ImageButton: 
            source:'bnorth.jpg'
            size_hint: 0.8, 0.8
            pos_hint: {'center_x':.1, 'center_y': .2}
            on_release: root.on_press()
<Image1e>: 
    orientation:'vertical'
    BoxLayout: 
        padding:5
        ImageButton: 
            source: 'aeast.jpg'
            size_hint: 0.6, 0.6
            pos_hint: {'center_x':.1, 'center_y': .8}
            on_release: root.on_press1()
    BoxLayout: 
        padding:5
        ImageButton: 
            source:'beast.jpg'
            size_hint: 0.8, 0.8
            pos_hint: {'center_x':.1, 'center_y': .2}
            on_release: root.on_press1()
"""
)
class ImageButton(ButtonBehavior, Image):  
    pass
class Image1n(Screen,BoxLayout):
    pass
class Image1e(Screen,BoxLayout):
    pass
class Image1BHKNorth(Screen,ButtonBehavior, Image,GridLayout):
    def imagebutton1bhknorth(self):
        return kv
    def on_press(self):        
        layout = GridLayout(cols=2,rows=2) 
        popupLabel = Label(text = "         Details"
                           "\n House Type - 1BHK"
                           "\n Area - 800")
        image= Image(source='anorth1.jpg')
        closeButton = Button(text = "Close",size_hint_x=0.1,size_hint_y=0.1)  
        layout.add_widget(popupLabel) 
        layout.add_widget(image)
        layout.add_widget(closeButton)
        popup = Popup(title ='                        Details', 
                      content = layout)   
        popup.open()    
        closeButton.bind(on_press = popup.dismiss)    
class Image1BHKEast(Screen,ButtonBehavior, Image,GridLayout):
    def imagebutton1bhkeast(self):
        return kv
    def on_press1(self):        
        layout = GridLayout(cols=2,rows=2) 
        popupLabel = Label(text = "         Details"
                           "\n House Type - 1BHK"
                           "\n Area - 800\n Direction - North")
        image= Image(source='aeast1.jpg')
        closeButton = Button(text = "Close",size_hint_x=0.1,size_hint_y=0.1)  
        layout.add_widget(popupLabel) 
        layout.add_widget(image)
        layout.add_widget(closeButton)
        popup = Popup(title ='                        Details', 
                      content = layout)   
        popup.open()    
        closeButton.bind(on_press = popup.dismiss)

class CustomScreen(Screen):
    def __init__(self, **kwargs):
        super(CustomScreen, self).__init__(**kwargs)
        layout = BoxLayout(orientation='vertical')
        self.spinnerObject = Spinner(text ="House", 
              values =("1BHK", "2BHK", "3BHK"), 
              background_color =(0.784, 0.443, 0.216, 1))  

        self.spinnerObject.size_hint = (0.2, 0.2) 

        self.spinnerObject.pos_hint ={'x': .35, 'y':.40}
        layout.add_widget(self.spinnerObject)
        #spinner-selection
        self.spinnerObject.bind(text=self.spinner_select)
        self.spinnerSelection = Label(text="%s"%self.spinnerObject.text)
        layout.add_widget(self.spinnerSelection)
        self.spinnerSelection.pos_hint={'x': .1, 'y':.3}
        #second spinner
        self.spinnerObject1 = Spinner(text ="Area", 
              values =("800","1200", "1500", "1800", "2200"), 
              background_color =(0.784, 0.443, 0.216, 1))  
        self.spinnerObject1.size_hint = (0.2, 0.2) 

        self.spinnerObject1.pos_hint ={'x': .35, 'y':.40} 

        layout.add_widget(self.spinnerObject1)
        #spinner-selection
        self.spinnerObject1.bind(text=self.spinner_select)
        self.spinnerSelection1 = Label(text="%s"%self.spinnerObject1.text)
        layout.add_widget(self.spinnerSelection1)
        self.spinnerSelection1.pos_hint={'x': .1, 'y':.3}
        #third spinner
        self.spinnerObject2 = Spinner(text ="Directions", 
              values =("North","East"), 
              background_color =(0.784, 0.443, 0.216, 1))  
        self.spinnerObject2.size_hint = (0.2, 0.2)       
        self.spinnerObject2.pos_hint ={'x': .35, 'y':.20}       
        layout.add_widget(self.spinnerObject2)
        #spinner-selection
        self.spinnerObject2.bind(text=self.spinner_select)
        self.spinnerSelection2 = Label(text="%s"%self.spinnerObject2.text)
        layout.add_widget(self.spinnerSelection2)
        self.spinnerSelection2.pos_hint={'x': .1, 'y':.3}

        layout.add_widget(Label(text=self.name, font_size=30))
        navig = BoxLayout(size_hint=(0.2,0.4),pos_hint={'top': 1, 'center_x':0.5})
        next = Button(text='Search')
        next.bind(on_release=self.switch_next)
        navig.add_widget(next)
        layout.add_widget(navig)
        self.add_widget(layout)
    def spinner_select(self,spinner,text):
        self.spinnerSelection.text = "%s"%self.spinnerObject.text
        self.spinnerSelection1.text = "%s"%self.spinnerObject1.text
        self.spinnerSelection2.text = "%s"%self.spinnerObject2.text

        self.ib=Image1BHKNorth()
        self.ib1=Image1BHKEast()
        if self.spinnerSelection.text=='1BHK'and self.spinnerSelection1.text=='800' and self.spinnerSelection2.text=='North':
            self.ib.imagebutton1bhknorth()
            sm.add_widget(Image1BHKNorth(name='onebhkn'))
        if self.spinnerSelection.text=='1BHK'and self.spinnerSelection1.text=='800' and self.spinnerSelection2.text=='East':
            self.ib1.imagebutton1bhkeast()
            sm.add_widget(Image1BHKEast(name='onebhke'))


    def switch_next(self, *args):
        self.manager.transition = SlideTransition(direction="right")
        self.manager.current = self.manager.next()

sm = ScreenManager()
sm.add_widget(CustomScreen())

class SA(App):
    def build(self):
        return sm

if __name__ == '__main__':
    SA().run()  

创建一个相当复杂的查询(至少出于测试目的)。

例如:

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); BoolQueryBuilder query = boolQuery(); List<Filter> textSearchFilters = new ArrayList<>(); for (Filter filter: requestWrapper.getFilters()) { if(filter.getLabel().equals("Search Query")){ textSearchFilters.add(filter); }else { addQuery(query, filter.getPath(), filter.getValues()); } } if(textSearchFilters.size() > 0) addSearchQuery(query, textSearchFilters); if(!(requestWrapper.getSortItem() == null)){ addSorting(requestWrapper.getSortItem(), searchSourceBuilder); } addSearchParams(requestWrapper, searchSourceBuilder); searchSourceBuilder.query(query); searchRequest.source(searchSourceBuilder); return elasticService.search(searchRequest, Task.class);

理想情况下,我想使用Mockito测试查询创建是否正确以及结果是否正确。这是我到目前为止的内容:

{"from":0,"size":10,"query":{"bool":{"filter":[{"terms":{"people.id":["1"],"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}},"sort":[{"ranking":{"order":"asc"}}]}

有效地,这里发生的事情是我试图在服务调用上使用eq()进行匹配的查询实际上与该服务所生成的查询不匹配。

(显然)我不太擅长构建此测试方案,因此对代码中的任何基本错误表示歉意。

您能指出正确的方向去尝试并做出那些断言吗?

当前失败响应的有趣部分是:

  

[MockitoHint] 1.未使用...->在org.epo.inbox.back.service.TaskServiceTest.testGetTasks(TaskServiceTest.java:75)

0 个答案:

没有答案