2015-12-06 35 views
6

Sahte final sınıflarını bozabilir mi? Öyleyse nasıl? Arama sonuçları bu gist'u ortaya çıkardı, ki bu da ima ediyor gibi görünüyor, ancak böyle bir örnek bulamıyorum. Ayrıca son sınıf alaycılarının desteklenmediğini söyleyen forum gönderileri buldum.Spock'te son sınıf mock

+0

Bazen, Groovy ile sadece bir deneyin en iyisidir. – cjstehno

+0

@cjstehno Denedim ve bir istisna var. Ama düşündüm ki, belki de bilmediğim özel bir yol var. –

+0

Cevabım sorunu çözüyor mu? – Opal

cevap

14

Bu şartname:

@Grab('org.spockframework:spock-core:1.0-groovy-2.4') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class Test extends Specification { 
    def 'lol'() { 
     given: 
     def s = Mock(String) { 
      size() >> 10 
     } 

     expect: 
     s.size() == 10   
    } 
} 

şu istisna ile biter:

JUnit 4 Runner, Tests: 1, Failures: 1, Time: 29 Test Failure: 
lol(Test) org.spockframework.mock.CannotCreateMockException: 
Cannot create mock for class java.lang.String because Java mocks cannot mock final classes. 
If the code under test is written in Groovy, use Groovy mock. 

çözüm GroovyMock kullanmaktır: iyi çalışıyor

@Grab('org.spockframework:spock-core:1.0-groovy-2.4') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class Test extends Specification { 
    def 'lol'() { 
     given: 
     def s = GroovyMock(String) { 
      size() >> 10 
     } 

     expect: 
     s.size() == 10   
    } 
} 

.

+0

Bunun için neden String.length()? –

+0

String.length() ile olan fark, Groovy sürümü değil, Java String sınıfında tanımlandığı için olabilir mi? Bu [cevap] (http://stackoverflow.com/a/12177035/369722) böyle görünüyor. –