2012-05-26 23 views
7

Şu anda JMock ile ilgili birkaç test yazıyorum. JMock - beklentileri eklemek için garip bir sözdizimi

context.checking(new Expectations() { ... } 

Bu

Expectations bir anonoymous instantiateion üretecektir olarak bildiğim kadarıyla, yavaş yavaş analiz

context.checking(new Expectations() { //context is of type Mockery of course 
      { 
       allowing(csv).getFileName(); 
       will(returnValue(fileName)); 
      } 
     }); 

: Ben aşağıdaki kod yapısını anlayamıyorum. Ama neden bundan sonra başka bir parantezimiz var, ve sonra da tuhaf, durağan olduğuna inanıyorum, izin verme gibi yöntemler() vs? Birisi bana Java'dan bakış açısını anlatabilirse, burada neler olup bittiğini çok minnettar olurdum.

cevap

6

İkinci küme kümesi instance initialization block oluşturur ve kodu derleyici tarafından sınıfın her kurucusuna kopyalanır. Bu, örnek üyelerine erişmenizi sağlar. JMock API'sı durumunda, beklentileri başlatmak için bir ters yol sağlar. Eşdeğer bir şeyi (Expectations güvenli olmayan bir çağrı hakkında derleyici tarafından geçersiz kılınan bir yöntemle derlerken bir uyarı ile) bir şablon yöntemiyle elde edebilirsiniz.

public abstract class Expectations { 
    public Expectations() { 
     buildExpectations(); 
    } 

    protected abstract void buildExpectations(); 

    ... 
} 

Ve testinizden

context.checking(new Expectations() { 
    protected void buildExpectations() { 
     allowing(csv).getFileName(); 
     will(returnValue(fileName)); 
    } 
}); 

yılında

Kesinlikle daha kısa versiyonunu tercih ediyorum. :)

1

Bazı insanlar beklentilerini belirtmek için , seyir serin veciz sağlar statik yöntemlerle, akıcı ve kolay okunabilir sözdizimi ile, statik olan başlatıcı beklenti yaratarak inanıyoruz - ve ben onlara katılıyorum. Awkward sözdizimi, alay çerçevelerinde yalnızca güzel bir şey değildir - kaputun altında çok iyi bir bytecode işlemi vardır.

+1

Gerçekten soruma cevap vermiyorum korkarım – Bober02

6

Örnek başlatıcılar ilginçtir. Onlar sadece JMock ile çok kullandıklarını gördüğüm yer. Daha kolay anlaşılabilir bir bağlam düşünün. Bir harita oluşturmak ve buna öğeler ekleyebilirsiniz:

Map<String,String> map = new HashMap<String,String>(){ 
    { 
     put("One","Something"); 
     put("Two","Other"); 
    } 
}; 

Belki bu JMock ne yaptığını görmek için yardımcı olacaktır.

İlgili konular