2015-08-21 3 views
6

मुझे sbt-groovy plugin मिला है और यह ठीक से परीक्षण और मुख्य स्रोत दोनों को ठीक से संकलित करता है। हालांकि, definedTests कुंजी हमेशा खाली होती है; एसबीटी कभी भी किसी भी ग्रोवी परीक्षणों की खोज नहीं करता है। मैंने इसे एक बहुत ही सरल एकल src/test/groovy/Test.groovy के साथ सत्यापित किया है जिसमें एक विधि को @Test एनोटेट किया गया है जिसे junit-interface द्वारा उठाया जाना चाहिए।ग्रोवी में लिखे गए परीक्षण लेने के लिए एसबीटी कैसे प्राप्त करें?

मुझे लगता है कि इस मुद्दे की जड़ यह है कि एसबीटी-ग्रोवी प्लगइन को own plugin source code में "परिभाषित टेस्ट" कार्य को परिभाषित करने की आवश्यकता है। यह कार्य Seq[TestDefinition] प्रदान करता है।

कैसे एसबीटी ही भरता है अनुक्रम यह स्केला संकलक से अतिरिक्त उत्पादन का उपयोग करता है का पता चलता है को देखते हुए (जो भी जावा फ़ाइलों को संकलित करने के लिए होता है, इसलिए यह जावा के लिए बॉक्स से बाहर काम करता है) एक Analysis वर्ग जहाँ से उत्पादन की आबादी में IncrementalCompiler

मेरे पास fiddled around with the taskdef है, लेकिन मुझे यकीन नहीं है कि मैं सही रास्ते पर भी हूं। इस सामान पर दस्तावेज़ीकरण बहुत अस्पष्ट है, या IncrementalCompiler से काफी जुड़ा हुआ है।

Seq[TestDefinition] का उत्पादन करने के लिए मुझे एसबीटी-ग्रोवी में किस कोड की आवश्यकता है जो एसबीटी को संतुष्ट करता है ताकि मैं ग्रोवी में लिखे गए परीक्षण (जूनिट-इंटरफ़ेस द्वारा उठाए गए) को चला सकूं?

उत्तर

2

परीक्षण पहचान कोड Tests.discover में है, जिसमें आप रुचि रखते हैं। ऐसा लगता है कि आपको एनोटेशन और उप-वर्गों की सूची के साथ विधियों की सूची की आवश्यकता है। यदि आपके पास उन्हें ढूंढने का कोई तरीका है, तो संभवतः आप कोड में क्या चल रहा है उसकी नकल कर सकते हैं।

जैसा कि आपने उल्लेख किया है, डिस्कवरी कोड Analysis डेटाटाइप पर निर्भर करता है, जो वृद्धिशील कंपाइलर का आंतरिक आंत है। आप इस तथ्य का लाभ उठाने में सक्षम हो सकते हैं कि यह एसबीटी (स्कैला या जावा कंपाइलर नहीं है) जो वृद्धिशील संकलन के लिए ज़िम्मेदार है। जावा संकलन के लिए, AnalyzingJavaCompiler.compile कंपाइलर को कॉल करता है और फिर विश्लेषण करता है।

सिद्धांत रूप में, आप AnalyzingGroovyCompiler को परिभाषित कर सकते हैं जो जावा संकलन के लिए उपयोग किए गए एक ही तंत्र का उपयोग करता है। यह के बाद पार्क में बिल्कुल चलना नहीं है, कुछ हिस्सों private[sbt] के पीछे छिपे हुए हैं। लंबी कहानी छोटी, मैंने एक हैकी सबूत-अवधारणा को एक साथ रखा जो ग्रोवी कोड के लिए Analysis उत्पन्न करने में वृद्धिशील कंपाइलर को झुकाता है, और एक परीक्षण का पता लगाने में सक्षम था।

मैं केवल एक सरल उपयोग के मामले

import org.junit.Test 
import org.junit.Assert 

class Foo { 
    @Test 
    public void foo() { 
    Assert.assertEquals(1, 2) 
    } 
} 

रनिंग test एसबीटी से निम्नलिखित उत्पादन yeilds साथ परीक्षण किया है:

> test 
[info] Start Compiling Test Groovy sources : /Users/xxx/sbt-2167-groovy/src/test/groovy 
[error] Test Foo.foo failed: expected:<1> but was:<2>, took 0.062 sec 
[error] Failed: Total 1, Failed 1, Errors 0, Passed 0 
[error] Failed tests: 
[error]   Foo 
[error] (test:test) sbt.TestsFailedException: Tests unsuccessful 
[error] Total time: 1 s, completed Aug 23, 2015 5:05:01 AM 

यह काम नहीं कर सकते एसबीटी के भविष्य के संस्करणों के साथ। चेतावनी emptor।

+0

यदि कोई टेस्ट कोड नहीं है तो क्या होता है? मैं एक समान समस्या में भाग रहा हूं जहां Test.discover कोई नहीं ढूंढता क्योंकि ... कोई स्रोत कोड नहीं है! यह इन सवालों के समान है: http://stackoverflow.com/questions/16389446/compile-tests-with-sbt-and-package-them-to-be-run-later http://stackoverflow.com/प्रश्न/22073998/चल-परीक्षण-से-जार-साथ-एसबीटी-testonly में एसबीटी –

संबंधित मुद्दे

 संबंधित मुद्दे