posts - 88, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          日歷

          <2017年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          搜索

          •  

          Junit @AfterClass訪問注入對象的方法

          Posted on 2017-04-15 10:32 Milo的海域 閱讀(603) 評論(0)  編輯  收藏 所屬分類: Java
          Spring默認(rèn)不允許對類的變量, 也就是靜態(tài)變量進行注入操作, 但是在某些場景比如單元測試的@AfterClass要訪問注入對象, 而Junit的這個方法必須是靜態(tài)的, 也就產(chǎn)生了悖論;

          解決思路有兩個:

          • 思路1: 想辦法對靜態(tài)變量注入, 也就是繞過Spring只能運行非靜態(tài)變量才能注入依賴的壁壘
          • 思路2: 想辦法@AfterClass改造為非靜態(tài)
            • 實現(xiàn)Junit RunListener, 覆蓋testRunFinished方法, 這里去實現(xiàn)類似@AfterClass的功能, 這個方法是非靜態(tài)的
            • 不要用Junit, 改用TestNG, TestNG里的AfterClass是非靜態(tài)的
            • 用Spring的TestExecutionListeners, 實現(xiàn)個Listener, 里面也有個類似非靜態(tài)的AfterClass的實現(xiàn), 覆蓋實現(xiàn)就行

          思路2的幾個方法都可以實現(xiàn), 但是單元測試Runner需要用

          @RunWith(Theories.class)

          而且改用TestNG工程浩大, 只能放棄掉這個思路

          繼續(xù)走思路1, 只能去繞過Spring的依賴注入的static壁壘了, 具體代碼如下:

          @Autowired
          private Destination dfsOperationQueue;
          private static Destination dfsOperationQueueStatic; // static version
          @Autowired
          private MessageQueueAPI messageQueueAPI;
          private static MessageQueueAPI messageQueueAPIStatic; // static version


          @PostConstruct
          public void init() {
          dfsOperationQueueStatic = this.dfsOperationQueue;
          messageQueueAPIStatic = this.messageQueueAPI;
          }

          @AfterClass
          public static void afterClass() {
          MessageVO messageVO = messageQueueAPIStatic.removeDestination(dfsOperationQueueStatic);
          System.out.println(messageVO);
          }

          其實就是用了@PostConstruct 來個偷梁換柱而已, 多聲明個靜態(tài)成員指向非靜態(tài)對象, 兩者其實是一個對象

          主站蜘蛛池模板: 沙湾县| 舒城县| 遂溪县| 阳泉市| 皮山县| 安徽省| 白沙| 佛山市| 泾川县| 绥芬河市| 蒲城县| 乌拉特前旗| 攀枝花市| 堆龙德庆县| 吉木乃县| 赞皇县| 巴青县| 醴陵市| 兰考县| 鹤岗市| 万全县| 澄城县| 兴宁市| 上栗县| 芮城县| 邛崃市| 霍山县| 错那县| 大悟县| 左贡县| 桦川县| 宁乡县| 西畴县| 晋城| 壤塘县| 唐海县| 交口县| 苏州市| 泗阳县| 茌平县| 平阴县|