2017-06-27 2 views
1

Ich lade eine DatabaseDrivenSpec.groovy in einer Feder-Controller-Methode.aber ich weiß nicht, wie die Methode im groovy Skript invokeMethod. kann mir jemand einen Rat geben?Wie kann ich einen Spock-Groovy-Test in Java-Methode

@Controller 
@RequestMapping("/spock") 
public class PmsTreeConfluentService { 
    private final Log logger = LogFactory.getLog(PmsTreeConfluentService.class);   

    @RequestMapping(value = "/test/spock", method = RequestMethod.GET) 
    public @ColumnResponseBody 
    List runTestMock() throws InstantiationException, IllegalAccessException, CompilationFailedException, IOException {    
     GroovyClassLoader classLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader()); 
     File sourceFile = new File("test/groovy/DatabaseDrivenSpec.groovy"); 
     Class testGroovyClass = classLoader.parseClass(new GroovyCodeSource(sourceFile)); 
     GroovyObject instance = (GroovyObject)testGroovyClass.newInstance();//proxy   
//  instance.invokeMethod(arg0, arg1) 

     instance = null; 
     testGroovyClass = null; 
     return null; 
    }    
} 

mit dem Führungs http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html

def binding = new Binding() 
def engine = new GroovyScriptEngine([tmpDir.toURI().toURL()] as URL[])   

while (true) { 
    def greeter = engine.run('ReloadingTest.groovy', binding)     
    println greeter.sayHello()             
    Thread.sleep(1000) 
} 

ich möchte nur den Zugriff auf http://127.0.0.1:8080/spock/test/spock dann den DatabaseDrivenSpec.groovy Testfall ausgeführt werden.

+0

Ihr PmsTreeConfluentService sieht wie ein Produktionscode aus, der normalerweise nicht vom Testcode abhängig ist. Was versuchst du zu erreichen? –

+0

Entschuldigung, es ist eine Java-Methode.Ich nur einfügen es in diesem Format kann es nicht.Wenn ich den obigen Code definieren. Ich möchte nur auf http://127.0.0.1:8080/spock/test/spock zugreifen dann den DatabaseDrivenSpec.groovy Testfall ausführen –

+1

Könnte ich fragen, warum? Müssen Sie den Test auch aus dem Dateisystem statt aus dem Jar laden? –

Antwort

3

Wenn Sie spock Spezifikationen ausgeführt werden soll programmatisch, können Sie so etwas wie dies versuchen:

import spock.util.EmbeddedSpecRunner 

EmbeddedSpecRunner runner = new EmbeddedSpecRunner() 
// There is a lot of runXXX methods, use the apropriate one 
runner.runXXXX(<Class of test: testGroovyClass> or <String of test code>) 

Spock basiert auf Junit Runners finden darüber here und einige Beispiel-Code here

Und ich Ich kenne das Problem, das Sie lösen möchten, nicht, aber ich empfehle dringend, den Test mit den bereits für diesen Zweck verfügbaren Tools auszuführen. Wie zum Beispiel Jenkins.

Verwandte Themen