2011-09-06 20 views
55

Arada ve Mockito arasındaki tuğla duvarın üzerinden çökmeye çalışıyorum. Ben Mockito şeyler için doğru ithalat statik ifadeleri almaya çalışırken üzerinde benim saçlarımı yırttım. Birinin sadece anyInt()()vb org.mockito.Mockito, geldiğindeorg.mockito.Matchers ve geliyor, ama bu olacağını söyleyerek bir tablo kusmak etmesini beklerdim yeni gelenler için çok faydalı, değil mi?Mockito yapıları için ithalat statik ifadelerini bulma

yıldızlarla biten sayısız fazla ithalat ifadelere karışık özellikle Bu tür şeyler, her zaman çok yararlı değildir:

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 

Evet, biliyorum ve Eclipse kullanan çalışıyorlar Pencere -> Tercihler-> Java -> Editör -> İçerik Yardımcısı -> Sık Kullanılanlar mekanizması. Bu yardımcı olur, ama kafasına çivi vurmaz.

Bu soruya verilen cevaplar takdir edilecektir. Russ

+0

: My Orijinal yayını ayrıca başka bir soru sordu, ancak eksik bir parantez nedeniyle kodumda yanlış bir şey olduğunu keşfettim, bu yüzden onu kaldırdım. –

+0

Bir hile sayfası mı arıyorsunuz? Muhtemelen birisini kırbaçlayabiliriz? API ile ilgili eksik olan nedir? http://mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/mockito/Matchers.html –

+2

Yani, anladığım kadarıyla, bu tür ifadelere baktığımda, içe aktarma ifadelerinde yıldızdan kaçınmam gerektiğini anladım. Kodun en üstünde yer alan şey, bir sembolün nereden geldiğini ve bu nedenle projemde hangi JAR'ın yer alacağını öğrenmenin hiçbir yolunun olmadığını ummaktır. Tarayıcıda Javadoc aranması sembol bulmak için çok iyi değil. Evet, bir hile sayfası gerçekten güzel olurdu, ancak bir meslektaşı ve şimdi tartıştığımız gibi, bu Java topluluğunun şimdiye kadar çözebileceğini düşündüğünüz sorunlardan biri. Teşekkürler - eğer bir tane varsa bana bildirin. –

cevap

15

sorun

Çok teşekkürler, Hamcrest ve Mockito statik ithalat benzer adlara sahip fakat sırasıyla Eşleyiciler ve gerçek değerleri döndürür olmasıdır.

Bir çalışma, Hamcrest ve/veya Mockito sınıflarını kopyalamak ve statik işlevleri silmek/yeniden adlandırmaktır, böylece daha kolay hatırlanmaları ve otomatik tamamlamada daha az görünmeleri sağlanır. Ben de öyle yaptım. Ayrıca, alay kullanırken, diğer assertions ve verify, örneğin, assertThat'dan kaçınmaya çalışıyorum.

assertEquals(1, 1); 
verify(someMock).someMethod(eq(1)); 

yerine

assertThat(1, equalTo(1)); 
verify(someMock).someMethod(eq(1)); 

Eğer Eclipse Favorilerinizden sınıfları kaldırmak ve örneğin uzun adını yazarsanız org.hamcrest.Matchers.equalTo ve 'İçe Aktar'ı Ekle'ye CTRL + ÜST KRKT + M yapın, sonra otomatik tamamlama sadece Hamcrest eşleştiricilerini gösterecektir, herhangi bir Mockito eşleştiricisi değil. Ve bunu eşleştiricileri karıştırmazsan başka bir şekilde yapabilirsin.

+1

Yup, şikayetlerimden birini yeni bir çıngırak olarak çektiniz: Bir arayüzün nereden geldiğinden emin değilim (JUnit, sahte çerçeve, Hamcrest, vb.) JAR'lardan bir projeyi parçalamaya çalışmak için daha çok zaman harcıyorum. Gerçekten de (günlüğüne kütüphanelerden ve başlık dosyalarından C arayüzleri yerleştirerek yaptığımdan daha fazla) gerekir. –

+0

Neden durmadan kaçındığınızı daha iyi anlayabilirsiniz: Bu konuda henüz yeterince fazla düşünmedim, ancak şu anda sadece alaylarla yazılı sınavlara girmeye çalışıyorum ve doğrulama işi benim için yeni. Teşekkürler. –

+0

Tamam, senin için başka bir çözümüm var. Umarım yardımcı olur! –

85

Durumla başa çıkmak için yaptığım şey.

Global ithalatı yeni bir test sınıfında kullanıyorum. Eğer testi yazma bitmiş ve, paketler organize etmek yalnızca CTRL + SHIFT + O sizi işlemek gerekiyorsa

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 
import static org.mockito.Matchers.*; 

.

import static org.mockito.Mockito.doThrow; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 
import static org.mockito.Mockito.when; 
import static org.mockito.Matchers.anyString; 

Bu uzakta içe doğru paketini bulmaya çalışırken 'sıkışmış' almadan kod sağlar: ile Örneğin, sadece bırakılabilir.

+6

Eğer bunu yapabilseydim iki kere ikram ederdim! – Justin

+0

Mac kullanıcıları için, CTRL + SHIFT + O yerine [command + shift + O] (https://blog.codecentric.de/en/2012/08/my-top-10-shortcuts-for-eclipse-on -mac-os-x-ve-windows-ve-nasıl-hayatta kalmak-the-change-from-windows-mac-mac/# comment-165299) –

+0

Statik org ithalatı gibi şeyler kullanarak kalıcı olarak kullanmak için dezavantajı nedir .junit.Assert. *; 'test sınıflarınızda (sonunda 'ctrl' +' shift' + 'O' ile değiştirilmemeli)? – mkasberg

0

için ise() assertThat için

import static org.hamcrest.CoreMatchers.*; 

()

import static org.junit.Assert.*; 

(için) ve) (doğrulamak

çevresinde bir topluluk pislik için üzgünüm
import static org.mockito.Mockito.*;